vc++6.0 对话框最小化到托盘,鼠标移到托盘的图标上,图标就消失了
if (wParam != IDR_MAINFRAME) { return 1; } switch (lParam) { // 双击左键的处理 case WM_LBUTTONDBLCLK: { // 简单的显示主窗口 this->ShowWindow(SW_SHOW); this->ShowWindow(SW_RESTORE); // 删除托盘图标 DeleteTray(); } break; default: break; }
自己的笔记(程序运行、最小化后图标在右下角,类似QQ)
在头文件MainFrm.h中声明NOTIFYICONDATA nid;
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
//***** 初始化系统托盘图标 *****//
nid.cbSize=(DWORD)sizeof(NOTIFYICONDATA);
nid.hWnd=this->m_hWnd;
nid.uID=IDR_MAINFRAME;
nid.uFlags=NIF_ICON|NIF_MESSAGE|NIF_TIP ;
nid.uCallbackMessage=WM_USER+1;//自定义的消息名称
nid.hIcon=LoadIcon(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDR_MAINFRAME));
strcpy(nid.szTip,"双击打开多功能电子钟");//信息提示条
Shell_NotifyIcon(NIM_ADD,&nid);//在托盘区添加图标
//***** 初始化系统托盘图标 *****//
//CenterWindow();
}
LRESULT CMainFrame::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
{
switch(message){
case WM_USER+1: //如果是用户定义的消息
if(lParam==WM_LBUTTONDOWN) //WM_LBUTTONDBLCLK不怎么灵
{
//鼠标单击时主窗口出现
::SetForegroundWindow(this->m_hWnd); //::SetWindowPos(this->m_hWnd,HWND_TOP,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE);
AfxGetApp()->m_pMainWnd->ShowWindow(SW_SHOW);
WindowIsHide=false;
return 0;
}
else if(lParam==WM_RBUTTONDOWN) // && WindowIsHide
{
::SetForegroundWindow(this->m_hWnd); //将主框架窗口置前,左击其他地方,菜单消失
//鼠标右键单击弹出菜单
CMenu menu;
menu.LoadMenu(IDR_MAINFRAME);
CMenu* pMenu=menu.GetSubMenu(0);
CPoint point;
GetCursorPos(&point);
pMenu->TrackPopupMenu(TPM_LEFTALIGN,point.x,point.y,AfxGetMainWnd());
::PostMessage(this->m_hWnd, WM_NULL, 0,0); //左击其他地方,菜单消失
menu.DestroyMenu();
return 0;
}
break;
case WM_SYSCOMMAND: //如果是系统消息
if(wParam==SC_MINIMIZE||wParam==SC_CLOSE||wParam==SC_MAXIMIZE||wParam==SC_SIZE)
{
//主窗口隐藏
AfxGetApp()->m_pMainWnd->ShowWindow(SW_HIDE);
WindowIsHide=true;
return 0;
}
break;
}
return CFrameWnd::WindowProc(message, wParam, lParam);
}
void CMainFrame::OnDestroy()
{
CFrameWnd::OnDestroy();
::Shell_NotifyIcon(NIM_DELETE,&nid);
}
最后 OnDestroy()里 删除系统托盘 ::Shell_NotifyIcon(NIM_DELETE,&m_tnid);
//////////////////定义系统托盘///////////////////////////
m_tnid.cbSize=sizeof(NOTIFYICONDATA);//设置结构大小//
m_tnid.hWnd=this->m_hWnd;//设置图标对应的窗口
m_tnid.uFlags=NIF_MESSAGE|NIF_ICON|NIF_TIP;//图标属性
m_tnid.uCallbackMessage=MYWM_NOTIFYICON;//应用程序定义的回调消息ID
////////////设置NOTIFYICONDATA结构///////////
CString szToolTip;
szToolTip=_T("CCTimer 2.5");
_tcscpy(m_tnid.szTip, szToolTip);//帮助信息
m_tnid.uID=IDR_MAINFRAME;//应用程序图标
HICON hIconx;
hIconx=AfxGetApp()->LoadIcon(IDI_ICON2);
m_tnid.hIcon=hIconx;//图标句柄
PNOTIFYICONDATA m_ptnid=&m_tnid;
::Shell_NotifyIcon(NIM_ADD,m_ptnid);//增加图标到系统盘
if(hIconx)::DestroyIcon(hIconx);
//////////////////////////////
/////////////////////////////
///////////////////////////
LRESULT CShutdownDlg::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
{
switch(message)
{
case MYWM_NOTIFYICON:
//如果是用户定义的消息
if(lParam==WM_LBUTTONDBLCLK)
{
//鼠标双击时主窗口出现
AfxGetApp()->m_pMainWnd->ShowWindow(SW_SHOW);
AfxGetApp()->m_pMainWnd->ShowWindow(SW_RESTORE);
::SetForegroundWindow(this->m_hWnd);
}
else if(lParam==WM_RBUTTONUP) //鼠标右键单击弹出选单
{
readregAutoRun();
::SetForegroundWindow(this->m_hWnd);
//BCMenu menu;
//CMenu menu;
//m_menu.SetMenuDrawMode(true);
//m_menu.LoadMenu(IDR_MENU1); //载入事先定义的选单
// m_menu.SetBitmapBackground(RGB(188,188,188));
//m_menu.LoadToolbar(IDR_TOOLBAR1);
//menu.EnableMenuItem(ID_MENUautoplay, MF_ENABLED);
// menu.SetBitmapBackground(RGB(12,58,255));
//m_menu.SetIconSize(16,16);
//m_menu.SetXPBitmap3D(true);
// CMenu *pMenu=(BCMenu *)menu.GetSubMenu(0);
BCMenu *psub = (BCMenu *)m_menu.GetSubMenu(0);
//CMenu *pMenu=menu.GetSubMenu(0);
CPoint pos;
GetCursorPos(&pos);
psub->SetMenuDrawMode(BCMENU_DRAWMODE_XP);
psub->SetXPBitmap3D(true);
psub->TrackPopupMenu(TPM_LEFTALIGN|TPM_RIGHTBUTTON,pos.x,pos.y,this);
// m_menu.DestroyMenu();
}
break;
}
return CDialog::WindowProc(message, wParam, lParam);
}
直接把NOTIFYICONDATA pnid; 设置成CMyQQDlg的成员函数
NOTIFYICONDATA pnid; 这个变量应该做成全局的
褒邰贝尔: 1、创建mfc工程(对话框)2、在myApp.cpp中InitInstance()中修改如下:CDialog* pd = new CDialog; HICON hIcon = LoadIcon(IDR_MAINFRAME); pd->Create(IDD_TEMP_DIALOG); //IDD_TEMP_DIALOG是一个不显示的对话框资源ID pd->...
富平县15566322959: 在VC6.0中怎么样才能,基于对话框的程序运行时就最小化到托盘,而不显示主窗口,网上看了很多都没什么差别?
褒邰贝尔: 如果你已经做到了“点击鼠标或菜单之后,才能最小化到托盘”,那么就简单了.可以在I初始化的时候对对话框发送最小化消息(这样会闪烁一下);或者在程序入口,调整dlg.DoModal为ShowWindow(SW_HIDE);//参考非模态对话框建立
富平县15566322959: VC++6.0中最小化到任务栏的相关问题 - ?
褒邰贝尔: 用Shell_NotifyIcon(),如果你不懂,我可以教你,最近我都在线(115959903)
富平县15566322959: VC++6.0如何在调试和跟踪基于对话框的程序? - ?
褒邰贝尔: F9设置断点,F5调试,你就输入参数啊,F10一步一步执行,F11是遇到函数进入函数内
富平县15566322959: vc++6.0中调用system函数,怎么让dos窗口不显示,或最小化啊?? - ?
褒邰贝尔: c#winform的多线程调用,需要注意一点,窗体的属性,必须由创建它的线程来执行.记住这一点,就基本上不会有什么问题了.你可以使用控件的invoke()方法来实现.
富平县15566322959: 请问在VC++6.0里新插入的对话框如何初始化 - ?
褒邰贝尔: Ctrl+W调出类向导,为你新建的对话框建一个类,在类向导class name中选中该类,在Message栏中找WM_INITDIALLG,双击,再在下面的Member function中双击选中的那个,新对话框类的OnInitDialog函数就被类向导建立起来了,
富平县15566322959: VC++6.0中对话框中字体大小如何改变 - ?
褒邰贝尔: 1、可以通过手动设置,右键对话框,选择属性,如下图:然后点击字体可以进行设置.2、可以通过添加代码进行改变,示例代码如下:BOOL __stdcall SetChildFont(HWND hwnd, LPARAM lparam) { CFont *pFont = (CFont*)lparam; CWnd *...
富平县15566322959: 如何设置VC++6.0平台下win32应用程序中对话框资源的位置 - ?
褒邰贝尔: 对话框资源属性设置中有这方面的设置.
富平县15566322959: 谁能手把手教我用VC++6.0实现点击菜单就能弹出对话框? - ?
褒邰贝尔: 首先新建一个对话框资源,随便你搞点什么百东东.双击对话框,选择新建一个类,随便你怎么命名了,不要起的很黄很暴力就行了.在资源选项中,选中菜单一栏,新建一个菜单项,ID,名字当然同上了度.右键选择新建的那个菜单项,选择class wizard,增加事件响应,提示你选择哪个类下的,这个由你了.最后点击OK,编辑版代码,就直接跳到编辑区了.然后再你这个类中包含你刚才新建的那个类的头文件,在这个代码编辑区中,写如下代码,假定你新建的类名叫:CDemoDlg,代码如下:CDemoDlg dlg;dlg.DoModel();完事!!!这是模权态对话框,非模态对话框你可以查下MSDN,也比较简单.
富平县15566322959: 如何在vc++6.0的主页面上添加输入提示栏 - ?
褒邰贝尔: 方法如下: 1、打开控制面板; 2、在打开的控制面板中选择“区域和语言”,如下图红色方框所示. 3、点击“区域和语言”后,就打开如下图所示的“区域和语言”设置对话框,默认位于格式选项中. 4、点击上面选项卡中的“键盘和语言”,然后在打开的设置页面中点击“更改键盘”,如下图红色方框所示. 5、点击更改键盘后,就打开如下图所示的文本服务和输入语言设置对话框. 7、将语言栏的状态改为“悬浮于桌面上”或者“停靠于任务栏”,然后点击右下方的“应用”和“确定”按钮,这样就可以看到输入法的图标了.