none
C++如何将VC程序的exe窗口最小化到桌脚右下方,程序已设置成开机启动(快捷方式到启动) RRS feed

  • 问题

  • C++如何将VC程序的exe窗口最小化到桌脚右下方,程序已设置成开机启动(快捷方式到启动),谁那里有课运行的程序?
    2013年2月4日 6:19

全部回复

  • 您好,

    这是两个步骤:

    1. 隐藏/显示程序主窗口

    2. 创建系统托盘图标和对应消息

    托盘之后可以建立弹出菜单、全局热键等方式,根据需要确定。

    1.先定义一个全局的变量:
    NOTIFYICONDATA nid
    2.然后在适当的位置对nid进行初始化,我是在主窗口的 while (GetMessage (&msg, NULL, 0, 0))  语句之前初始化的。
    nid.cbSize = sizeof(NOTIFYICONDATA);     //初始化结构的大小
    nid.hWnd = hwnd;                         //指定接收托盘消息的句柄
    nid.uID = IDI_ICON1;                     //指定托盘图标的ID
    nid.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP;  //设定结构里有效的位置
    //NIF_ICON:     指定hIcon是有效的,(这里设定自定义系统托盘图标必须的
    //NIF_MESSAGE:  指定uCallbackMessage是有效的,用于程序接收来自托盘图标的消息,需要自定义一个消息
    //NIF_TIP:      指定szTip是有效的,功能是当鼠标移动到图标上时,显示提示信息 
    nid.uCallbackMessage = WM_IAWENTRAY;     //自定义的消息,我在一开始定义了一个自定义消息 //#define WM_IAWENTRAY  WM_USER+5
    nid.hIcon = LoadIcon(g_hInst, MAKEINTRESOURCE(IDI_ICON1));  //设置图标的句柄
    _tcscpy(nid.szTip,TEXT("TimeWork正在工作!\r\n点击打开主界面")); //设置鼠标移上托盘图标时的提示信息 //_tcscpy是tchar.h里定义的宏
    完成了上面的设置,就可以调用了。
    3.我们将在最小化窗口消息里调用 Shell_NotifyIcon(NIM_ADD, &nid) 将图标设置到系统托盘。

    case WM_DESTROY: Shell_NotifyIcon(NIM_DELETE, &nid); return TRUE; case WM_SYSCOMMAND: switch(wParam) { case SC_CLOSE: DestroyWindow(hDlg); PostQuitMessage(0); return TRUE; case SC_MINIMIZE: ShowWindow(hwnd,SW_HIDE); Shell_NotifyIcon(NIM_ADD, &nid); return TRUE; }

    在自定义的 WM_IAWENTRAY 消息里面判断鼠标是否点击,并调用 ShowWindow(hwnd, SW_SHOWNORMAL) 显示主窗口。

    case WM_IAWENTRAY:
    if(wParam == IDI_ICON1){
    if(lParam == WM_LBUTTONDOWN){
    ShowWindow(hDlg, SW_SHOWNORMAL);
    return TRUE;}
    }return FALSE;

    其中消息的wParam参数为指定的图标ID,lParam参数为事件类型,示例里只接收了WM_LBUTTONDOWN事件,即鼠标左键点击事件!


    2013年2月12日 10:56