user-0 提问: Windows编程初学者问题

回复:
user: user-1
content: 刚才没显示图，现在看见了，应该这么写：   hwnd = CreateWindow(      TEXT("myexe"),//窗口类名       TEXT("俺的窗口"),       WS_OVERLAPPEDWINDOW,         0,0,600,400,       NULL,NULL,hInstance,NULL);      ShowWindow(hwnd,nShowCmd);      UpdateWindow(hwnd);

user: user-1
content: 引用 6 楼 riderinfo119705 的回复:我点击continue一直出现。break就返回了，编译没有问题啊！  点continue一直出现？啥意思？你是不是在while循环那里打了断点(F9)？或者在myProc打了断点？要是这两个地方有断点，continue是点不完的，因为消息一直有。

user: user-0
content: 引用 5 楼 go_and_see 的回复:[quote=引用 3 楼 riderinfo119705 的回复:] [quote=引用 2 楼 go_and_see 的回复:] 窗口类不能为空，窗口过程也没有，能不失败嘛。 新手，请说大白话，听不懂。就告诉我怎么修改吧！做我师父吧：qq614211648[/quote]  windows窗口程序一般步骤如下： 1、指定窗口样式、指定窗口过程等信息，然后注册窗口类(RegisterClass)。 2、创建窗口。 3、消息循环(while循环)。  少了这三步任意一步，窗口程序就无法正确运行。 你点文件->新建项目->visual c++ -> win32->win32项目，选择目录，对比一下向导生成的代码和你的代码有啥区别就理解了。QQ就不加了，公司不能上QQ。[/quote] 大师，我这会编译通过了，但是程序有问题，注册成功了在showwindow和updatewindow和while那里出了问题看不懂代码如下：#include <Windows.h> LRESULT CALLBACK MyProc( 							HWND hwnd,      // handle to window 							UINT uMsg,      // message identifier 							WPARAM wParam,  // first message parameter 							LPARAM lParam   // second message parameter 							); int WINAPI WinMain(__in HINSTANCE hInstance, __in_opt HINSTANCE hPrevInstance, __in_opt LPSTR lpCmdLine, __in int nShowCmd ){ MSG msg; WNDCLASS wndclass; HWND hwnd; wndclass.cbClsExtra=0; wndclass.cbWndExtra=0; wndclass.hbrBackground= (HBRUSH)GetStockObject(WHITE_BRUSH);   wndclass.hCursor=LoadCursor(NULL,IDI_HAND); wndclass.hIcon=LoadIcon(NULL,IDC_APPSTARTING); wndclass.hInstance=hInstance; wndclass.lpfnWndProc=MyProc; wndclass.lpszClassName=TEXT("myexe"); wndclass.lpszMenuName=NULL; wndclass.style=CS_HREDRAW | CS_VREDRAW; if (!RegisterClass(&wndclass)) { 	MessageBox(NULL,TEXT("ERROR!"),TEXT("title"),MB_OK | MB_ICONERROR); 	return 0; }  else { 	MessageBox(NULL,TEXT("ok!"),TEXT("title"),MB_OK | MB_ICONWARNING); } CreateWindow( 			 TEXT("myexe"),//窗口类名 			 TEXT("俺的窗口"), 			 WS_OVERLAPPEDWINDOW,   			 0,0,600,400, 			 NULL,NULL,hInstance,NULL); ShowWindow(hwnd,nShowCmd); UpdateWindow(hwnd); while (GetMessage(&msg,hwnd,0,0)) { 	TranslateMessage(&msg); 	DispatchMessage(&msg); } return msg.wParam; } LRESULT CALLBACK MyProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){ 	switch(message)   	{   	case WM_DESTROY:   		PostQuitMessage(0);   		return 0;   	}   	return DefWindowProc(hwnd,message,wParam,lParam);    }       之后就出现了这个情况:                               我点击continue一直出现。break就返回了，编译没有问题啊！

user: user-1
content: 引用 3 楼 riderinfo119705 的回复:[quote=引用 2 楼 go_and_see 的回复:] 窗口类不能为空，窗口过程也没有，能不失败嘛。 新手，请说大白话，听不懂。就告诉我怎么修改吧！做我师父吧：qq614211648[/quote]  windows窗口程序一般步骤如下： 1、指定窗口样式、指定窗口过程等信息，然后注册窗口类(RegisterClass)。 2、创建窗口。 3、消息循环(while循环)。  少了这三步任意一步，窗口程序就无法正确运行。 你点文件->新建项目->visual c++ -> win32->win32项目，选择目录，对比一下向导生成的代码和你的代码有啥区别就理解了。QQ就不加了，公司不能上QQ。

user: user-0
content: 引用 楼主 riderinfo119705 的回复:#include <Windows.h> int WINAPI WinMain(__in HINSTANCE hInstance, __in_opt HINSTANCE hPrevInstance, __in_opt LPSTR lpCmdLine, __in int nShowCmd ){ WNDCLASS wndclass; MSG msg; HWND hwnd; wndclass.style=CS_HREDRAW|CS_VREDRAW; wndclass.cbClsExtra=0; wndclass.cbWndExtra=0; wndclass.hbrBackground=(HBRUSH)GetStockObject(BLACK_BRUSH); wndclass.hCursor=IDI_APPLICATION; wndclass.hIcon=IDC_APPSTARTING; wndclass.hInstance=hInstance; wndclass.lpszClassName=NULL; wndclass.lpszMenuName=NULL; if(!RegisterClass(&wndclass)){  	MessageBox(NULL,TEXT("窗口注册失败!"),TEXT("错误"), MB_OK | MB_ICONERROR ) ; 	return 0; }else{ MessageBox(NULL,TEXT("窗口注册成功!"),TEXT("提示"), MB_OK | MB_ICONWARNING);  } CreateWindow(TEXT("mywindow"),TEXT("俺的窗口"), 			  			 WS_OVERLAPPEDWINDOW,       //窗口的风格 			 CW_USEDEFAULT,             //窗口初始显示位置x:使用缺省值 			 CW_USEDEFAULT,             //窗口初始显示位置y:使用缺省值 			 CW_USEDEFAULT,             //窗口的宽度:使用缺省值 			 CW_USEDEFAULT,             //窗口的高度:使用缺省值 			 NULL,                      //父窗口:无 			 NULL,                      //子菜单:无 			 hInstance,                 //该窗口应用程序的实例句柄  			 NULL                       //  			 ); ShowWindow(hwnd,SW_SHOWDEFAULT); UpdateWindow(hwnd); return  0; }为什么总是注册失败，我不写windowproc是我不会一写就出错复制别人的也出错。和不写windowproc有关系吗? 我不懂俄

user: user-0
content: 引用 2 楼 go_and_see 的回复:窗口类不能为空，窗口过程也没有，能不失败嘛。 新手，请说大白话，听不懂。就告诉我怎么修改吧！做我师父吧：qq614211648

user: user-1
content: 窗口类不能为空，窗口过程也没有，能不失败嘛。

user: user-2
content: 使用多字节编码 #pragma comment(lib,"user32") #pragma comment(lib,"gdi32") #include <windows.h> LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) {     PAINTSTRUCT ps;     HDC hdc;     HFONT hfont,ohfont;     RECT r;     COLORREF oc;      switch(message) {     case WM_CLOSE://按Alt+F4退出         PostQuitMessage(0);         break;     case WM_PAINT:         BeginPaint(hWnd, &ps);         hdc = ps.hdc; // the device context to draw in         GetClientRect(hWnd, &r); // Obtain the window's client rectangle         hfont = CreateFont(240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "华文楷体");         ohfont=(HFONT)SelectObject(hdc,hfont);         oc=SetTextColor(hdc,0x00C080FF);         SetBkMode(hdc, TRANSPARENT);         TextOut(hdc,r.left+r.right/2-720, r.top+r.bottom/2-120,"最短画图程序",12);         SelectObject(hdc,ohfont);         SetTextColor(hdc,oc);         DeleteObject(hfont);         EndPaint(hWnd, &ps);         break;     default:         return DefWindowProc(hWnd, message, wParam, lParam);     }     return 0; } int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {     MSG msg             = {0};     WNDCLASS wc         = {0};     HBRUSH hbrh;     hbrh=CreateSolidBrush(0x00000000);     wc.lpfnWndProc      = WndProc;     wc.hInstance        = hInstance;     wc.hbrBackground    = hbrh;     wc.lpszClassName    = "minwindowsapp";     wc.hCursor          = LoadCursor(NULL,IDC_ARROW);     if( FAILED(RegisterClass(&wc)) ) return 1;      if(FAILED(CreateWindow(wc.lpszClassName,                         "Minimal Windows Application",                         WS_POPUP|WS_VISIBLE,                         0,                         0,                         GetSystemMetrics(SM_CXSCREEN),                         GetSystemMetrics(SM_CYSCREEN),                         0,                         0,                         hInstance,                         NULL)))         return 2;      while( GetMessage( &msg, NULL, 0, 0 ) > 0 ) {         DispatchMessage( &msg );     }     DeleteObject(hbrh);     return 0; }