今天开始VC学习记录。
既然是windows程序设计,那最开始的必然是先创建一个窗口。虽然简单,但是居然还是折腾了几下。
一开始是注册失败,GetLastError发现87错误,最后发现是参数错误。然后CreateWindow又失败,返回1407错误,找了半天,发现是CreateWindow的第一个参数必须与注册的窗口类的lpszClassName参数保持一致。
解决。
#include <windows.h>
LRESULT WINAPI MsgProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
switch(msg)
{
case WM_DESTROY:
PostQuitMessage(0);
return 0;
break;
}
return DefWindowProc(hWnd, msg, wParam, lParam);
}
int WINAPI WinMain(HINSTANCE hInst, HINSTANCE prevhInst, LPSTR cmdLine, int show)
{
char szTitle[]="Wayne"; // The title bar text
char szWindowClass[]="Demo"; // The title bar text
WNDCLASSEX wc;
wc.cbSize=sizeof(WNDCLASSEX);
wc.style=NULL;
wc.lpfnWndProc=MsgProc;
wc.cbClsExtra=0;
wc.cbWndExtra=0;
wc.hInstance=hInst;
wc.hIcon=LoadIcon(NULL,IDI_APPLICATION);
wc.hCursor=LoadCursor(NULL,IDC_ARROW);
wc.hbrBackground=(HBRUSH)GetStockObject(BLACK_BRUSH);
wc.lpszMenuName=NULL;
wc.lpszClassName=szTitle;
wc.hIconSm=LoadIcon(NULL,IDI_APPLICATION);
if(!RegisterClassEx(&wc))
{
int n = GetLastError();
MessageBox(NULL, "注册失败", NULL, MB_ICONERROR);
return 0;
}
// Create the application's window
HWND hWnd = CreateWindow(szTitle, szWindowClass, WS_OVERLAPPEDWINDOW,100, 100, 640, 480, NULL, NULL,hInst ,NULL);
if(hWnd == NULL)
{
int n = GetLastError();
MessageBox(NULL, "创建窗口失败", NULL, MB_ICONERROR);
return 0;
}
ShowWindow(hWnd, SW_SHOWDEFAULT);
UpdateWindow(hWnd);
// Enter the message loop
MSG msg;
ZeroMemory(&msg, sizeof(msg));
while(msg.message != WM_QUIT)
{
if(PeekMessage(&msg, NULL, 0U, 0U, PM_REMOVE))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
else
{
//Do something to the screen
}
}
// Unregister our window.
UnregisterClass(szTitle, wc.hInstance);
return 0;
}