CreateWindow问题
本帖最后由 885031918 于 2015-3-14 21:56 编辑1.WNDCLASS的wndclass.lpszClassName = szAppname;CreateWindow的第一个参数不是szAppname就无法显示了(但是后台是有的),,这是为啥?
贴代码 freeparty 发表于 2015-3-15 08:28
贴代码
#include "windows.h"
#include "strsafe.h"
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR iCmdLine, int iCmdShow)
{
MSG msg;
WNDCLASS wdc;
HWND hwnd;
static TCHAR szAppname[] = TEXT("1" );
static TCHAR szApp[] = TEXT("2");
wdc.style = CS_HREDRAW | CS_VREDRAW;
wdc.cbClsExtra = 0;
wdc.cbWndExtra = 0;
wdc.lpfnWndProc = WndProc;
wdc.hInstance = hInstance;
wdc.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(101));
wdc.hCursor = LoadCursor(NULL, IDC_ARROW);
wdc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
wdc.lpszClassName = szAppname;
wdc.lpszMenuName = NULL;
if (!RegisterClass(&wdc))
{
MessageBox(NULL, TEXT("这个程序需要Windows NT才能运行!"),szAppname, MB_ICONERROR);
return 0;
}
hwnd = CreateWindow(szApp,
szApp,
WS_OVERLAPPEDWINDOW|WS_VSCROLL|WS_HSCROLL,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
NULL,
NULL,
hInstance,
NULL
);
ShowWindow(hwnd, iCmdShow);
UpdateWindow(hwnd);
while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
} RegisterClass时的时候传入一个WNDCLASS结构是在系统中注册一个样式为WNDCLASS的内存样式,CreateWindow的第一个参数要求你给出系统一个类名,然而这个创建的窗口样式就和WNDCLASS一样了,如果你没有传入类名,或是传入了一个没有注册的类名,CreateWindow就会失败,然后在下面消息循环中陷入一个死循环,所以程序就不会自己去退出进程了。
有不明白的加群246537769 freeparty 发表于 2015-3-15 13:23
RegisterClass时的时候传入一个WNDCLASS结构是在系统中注册一个样式为WNDCLASS的内存样式,CreateWindow的 ...
非常感谢你的耐心解答。 885031918 发表于 2015-3-15 14:14
非常感谢你的耐心解答。
不客气,加群我们共同学习windows程序设计 freeparty 发表于 2015-3-15 14:16
不客气,加群我们共同学习windows程序设计
不是吧,,,你还不让我加(有不明白的加群246537769)?
885031918 发表于 2015-3-15 14:44
不是吧,,,你还不让我加(有不明白的加群246537769)?
没有啊,你重加下。 http://baike.baidu.com/view/1001690.htm
http://baike.baidu.com/view/1013839.htm 代码需要慢慢理解,不可能一步登天。{:5_97:} 厉害 学习了 路过看看
页:
[1]