CreateWindow的出错解决

CreateWindow返回NULL,而且GetLastError()也返回0,代码如下:

 WNDCLASSEX wc =
 {
  sizeof( WNDCLASSEX ), CS_CLASSDC, NULL/*gWndProc 注意这里直接把它写成 NULL ,贪方便啊.*/, 
  0L, 0L,
  GetModuleHandle( NULL ), NULL, NULL, NULL, NULL,
  classname, NULL
 };
 RegisterClassEx( &wc );

 HWND hWnd = CreateWindow( classname, wndname,
  WS_DLGFRAME | WS_SYSMENU, 0, 0,m_ScreenWidth, m_ScreenHeight,
  ::GetDesktopWindow(), NULL,wc.hInstance, NULL );

 

 
把窗口回调函数写成了 NULL ,发现窗口没有显示出来。。,CreateWindow 函数调用 失败...
笨蛋,窗口回调函数都没有.那么消息流向呢.. 这样当然不行的啊..
 
 1 #include <windows.h>
 2 #include <stdio.h>
 3 
 4 LRESULT CALLBACK WinSunProc(
 5   HWND hwnd,      // handle to window
 6   UINT uMsg,      // message identifier
 7   WPARAM wParam,  // first message parameter
 8   LPARAM lParam   // second message parameter
 9 );
10 
11 int WINAPI WinMain(
12   HINSTANCE hInstance,      // handle to current instance
13   HINSTANCE hPrevInstance,  // handle to previous instance
14   LPSTR lpCmdLine,          // command line
15   int nCmdShow              // show state
16 )
17 {
18     WNDCLASS wndcls;
19     wndcls.cbClsExtra=0;
20     wndcls.cbWndExtra=0;
21     wndcls.hbrBackground=(HBRUSH)GetStockObject(BLACK_BRUSH);
22     wndcls.hCursor=LoadCursor(NULL,IDC_CROSS);
23     wndcls.hIcon=LoadIcon(NULL,IDI_ERROR);
24     wndcls.hInstance=hInstance;
25     wndcls.lpfnWndProc=WinSunProc;
26     wndcls.lpszClassName="sunxin2006";
27     wndcls.lpszMenuName=NULL;
28     wndcls.style=CS_HREDRAW | CS_VREDRAW;
29     RegisterClass(&wndcls);
30 
31     HWND hwnd;
32     hwnd=CreateWindow("sunxin2006","http://www.sunxin.org",WS_OVERLAPPEDWINDOW,
33         0,0,600,400,NULL,NULL,hInstance,NULL);
34 
35     ShowWindow(hwnd,SW_SHOWNORMAL);
36     UpdateWindow(hwnd);
37 
38     MSG msg;
39     while(GetMessage(&msg,NULL,0,0))
40     {
41         TranslateMessage(&msg);
42         DispatchMessage(&msg);
43     }
44     return msg.wParam;
45 }
46 
47 LRESULT CALLBACK WinSunProc(
48   HWND hwnd,      // handle to window
49   UINT uMsg,      // message identifier
50   WPARAM wParam,  // first message parameter
51   LPARAM lParam   // second message parameter
52 )
53 {
54     switch(uMsg)
55     {
56     case WM_CHAR:
57         char szChar[20];
58         sprintf(szChar,"char code is %d",wParam);
59         MessageBox(hwnd,szChar,"char",0);
60         break;
61     case WM_LBUTTONDOWN:
62         MessageBox(hwnd,"mouse clicked","message",0);
63         HDC hdc;
64         hdc=GetDC(hwnd);
65         TextOut(hdc,0,50,"程序员之家",strlen("程序员之家"));
66         //ReleaseDC(hwnd,hdc);
67         break;
68     case WM_PAINT:
69         HDC hDC;
70         PAINTSTRUCT ps;
71         hDC=BeginPaint(hwnd,&ps);
72         TextOut(hDC,0,0,"http://www.sunxin.org",strlen("http://www.sunxin.org"));
73         EndPaint(hwnd,&ps);
74         break;
75     case WM_CLOSE:
76         if(IDYES==MessageBox(hwnd,"是否真的结束?","message",MB_YESNO))
77         {
78             DestroyWindow(hwnd);
79         }
80         break;
81     case WM_DESTROY:
82         PostQuitMessage(0);
83         break;
84     default:
85         return DefWindowProc(hwnd,uMsg,wParam,lParam);
86     }
87     return 0;
88 }

 

posted @ 2013-08-16 16:54  herizai007  阅读(635)  评论(0编辑  收藏  举报