我来我网
https://5come5.cn
 
您尚未 登录  注册 | 菠菜 | 软件站 | 音乐站 | 邮箱1 | 邮箱2 | 风格选择 | 更多 » 
 

本页主题: [求助]关于Win32编程的一个问题 显示签名 | 打印 | 加为IE收藏 | 收藏主题 | 上一主题 | 下一主题

albert





性别: 保密 状态: 该用户目前不在线
等级: 栋梁之材
家族: 唯war独尊
发贴: 634
威望: 0
浮云: 1116
在线等级:
注册时间: 2005-10-04
最后登陆: 2012-02-12

5come5帮你背单词 [ summon /'sΛmən/ vt. 传唤,召集 ]


[求助]关于Win32编程的一个问题

#include <windows.h>    

LRESULT CALLBACK WndProc(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam);
int WINAPI WinMain(   HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int   nCmdShow)    
{
  MSG     msg;
  WNDCLASS   wc;
  HWND hWnd;

  wc.style         = CS_HREDRAW | CS_VREDRAW;  
  wc.lpfnWndProc     = (WNDPROC) WndProc;          
  wc.cbClsExtra     = 0;                        
  wc.cbWndExtra     = 0;                        
  wc.hInstance     = hInstance;                  
  wc.hIcon         = LoadIcon(NULL, IDI_WINLOGO);        
  wc.hCursor         = LoadCursor(NULL, IDC_ARROW);    
  wc.hbrBackground   = (HBRUSH)GetStockObject(BLACK_BRUSH);                        
  wc.lpszMenuName     = NULL;                    
  wc.lpszClassName   = "Demo";    

  if (!RegisterClass(&wc))                        
  {
    MessageBox(NULL,"Failed To Register The Window Class.","ERROR",MB_OK|MB_ICONEXCLAMATION);
    return FALSE;                          
  }
  hWnd=CreateWindow(
                    "Demo",                
                    "Demo1",                                        
                    WS_OVERLAPPEDWINDOW,          
                    CW_USEDEFAULT,
                    CW_USEDEFAULT,                    
                    CW_USEDEFAULT,  
                    CW_USEDEFAULT,  
                    NULL,                  
                    NULL,                    
                    hInstance,            
                    NULL    
    );
  ShowWindow(hWnd,nCmdShow);
  UpdateWindow(hWnd);

  //这里为什么改成GetMessage(&msg,hWnd,0,0)程序就关不了了?    
  while(GetMessage(&msg,NULL,0,0))
  {
    TranslateMessage(&msg);
    DispatchMessage(&msg);
  }

  return (msg.wParam);                  
}

LRESULT CALLBACK WndProc(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam)        
{
  switch (uMsg)                        
  {
    case WM_CLOSE:
        PostQuitMessage(0);          
        return 0;

    default:
        break;
  }

  return DefWindowProc(hWnd,uMsg,wParam,lParam);
}

如果将GetMessage中的第2个NULL参数改成和hWnd程序就关不了了,我查过MSDN上边讲当第2个参数是NULL时,表示为属于该程序的消息队列的所有窗口检索信息。但问题是,我这个程序里就只有一个窗口,用该窗口的句柄作为参数应该也可以吧。
望高手指点一二。
顶端 Posted: 2006-11-13 21:12 | [楼 主]
海兰



性别: 帅哥 状态: 该用户目前不在线
头衔: 再见了,我的大学
等级: 荣誉会员
家族: 低调一族
发贴: 9006
威望: 3
浮云: 406
在线等级:
注册时间: 2005-10-02
最后登陆: 2013-04-28

5come5帮你背单词 [ disease /di'zi:z/ n. 疾病 ]


LZ这个程序,我执行试了试,如果运行完后窗口不动,直接关就关不掉,但是只要稍微拖动下窗口,让它UPDATE重画一次就可以关掉了...具体原因不清楚,我猜想是hWnd必须在进入了第1次消息循环后才获得当前窗口句柄.在此之前是个随机值吧.所以要UPDATE一下,发送一个PAINT消息让hWnd指向当前窗口.
顶端 Posted: 2006-11-13 22:32 | [1 楼]
我来我网·5come5 Forum » 程序员之家

Total 0.010413(s) query 6, Time now is:11-24 00:49, Gzip enabled
Powered by PHPWind v5.3, Localized by 5come5 Tech Team, 黔ICP备16009856号