首先我创建一个Win32的空工程
创建一个窗口
hMenu=LoadMenu(hInstance,MAKEINTRESOURCE(MYMENU));hAccele=LoadAccelerators(hInstance,MAKEINTRESOURCE(MYACCELE));hwnd=CreateWindow(strName,"虚拟桌面",WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,0,CW_USEDEFAULT,0,NULL,hMenu,
hInstance,hAccele);这个窗口有菜单hMenu和快捷键hAccele,快捷键为RegisterHotKey(hwnd,0x0001,0,VK_F1);调用
ShowWindow(hwnd,nShowCmd);
UpdateWindow(hwnd);
窗口显示出来了然后在WinMain函数中
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nShowCmd)
{
    hDesk=CreateDesktop("Virtual","NULL",NULL,DF_ALLOWOTHERACCOUNTHOOK,GENERIC_ALL,NULL);
    //创建一个新的桌面    hCurrent=GetThreadDesktop(GetCurrentThreadId());
    //得到当前桌面句柄
    //并定义一个全局变量 HDESK buf;
    buf=hCurrent;最后在回调函数中LRESULT CALLBACK WndProc(HWND hwnd,UINT uMsg,WPARAM wParam,LPARAM lParam)
{
case WM_HOTKEY:
if(0x0001==LOWORD(wParam))
if(buf==hCurrent)
{
    SwitchDesktop(hDesk); //切换到新建的桌面
    ShowWindow(hwnd,SW_SHOW);//显示“虚拟桌面” 这个应用程序
    buf=hDesk;
}
else
{
    SwitchDesktop(hCurrent);//切换到原来桌面
    ShowWindow(hwnd,SW_SHOW);//显示"虚拟桌面",这个应用程序
    buf=hCurrent;
}
break;
}注意:问题来了 我按下F1切换到新的桌面hDesk,但是ShowWindow(hwnd,SW_SHOW);却没有显示出我想要的应用程序窗口····
这个是怎么个情况····

解决方案 »

  1.   

    给回调函数加上default,处理你没有处理的消息case ...;default: return DefWindowProc(
      HWND hWnd,      // handle to window
      UINT Msg,       // message identifier
      WPARAM wParam,  // first message parameter
      LPARAM lParam   // second message parameter
    );
      

  2.   

    可以去csdn的下载中心搜索相关的例子。
      

  3.   

    例子我是看过了 不过···很水啊
    例子的做法是把应用程序隐藏起来而不是新建一个桌面····
    ShowWindow(hwnd,SW_HIDE)`````
      

  4.   


    我先Set了还是不显示····郁闷,就算我先set 然后再CreateWindow,新建的窗口也会显示在缺省桌面,也就是原桌面····