此例题来自3.1.2 完整创建一个窗口,且能处理函数,中间自己期间遇到些问题,
比方说CreateWindow函数少一个参数,比方说callback函数写错 引发c4330错误,还有后面WM_CREATE中
PlaySound
引发 error LNK2001: 无法解析的外部符号 __imp__PlaySoundA@12错误,主要原因就是自己在目录下根本就没有这个文件,自然要引发错误!
中的总体还是能顺利编译程序,对程序的具体还需要我自己慢慢理解:
#include <Windows.h>
LRESULT CALLBACK WndProc (HWND, UINT,WPARAM, LPARAM);
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,
PSTR szCmdLine,int iCmdShow)
{
//LRESULT CALLBACKE WndPro(HWND, UINT,WPARAM, LPARAM);
static TCHAR szAppName[]=TEXT("HeeloWin");
HWND hWnd;
MSG msg;
WNDCLASS wndclass;
wndclass.style =CS_HREDRAW| CS_VREDRAW;
wndclass.lpfnWndProc =WndProc;
wndclass.cbClsExtra =0;
wndclass.cbWndExtra =0;
wndclass.hInstance =hInstance;
wndclass.hIcon =LoadIcon(NULL,IDI_APPLICATION);
wndclass.hCursor =LoadCursor (NULL,IDC_ARROW);
wndclass.hbrBackground =(HBRUSH) GetStockObject (WHITE_BRUSH);
wndclass.lpszClassName =szAppName;
wndclass.lpszMenuName =NULL;
if(!RegisterClass(&wndclass))
{
MessageBox(NULL,TEXT("this program requries window nt!"),
szAppName,MB_ICONERROR);
return 0;
}
hWnd=CreateWindow(szAppName,
TEXT ("the hello program"),
WS_OVERLAPPEDWINDOW,
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;
}
LRESULT CALLBACK WndProc(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam)
{
HDC hdc;
PAINTSTRUCT ps;
RECT rect;
switch(message)
{
case WM_CREATE:
//PlaySound(TEXT("hellowin.wav"),NULL,SND_FILENAME|SND_ASYNC);
return 0;
case WM_PAINT:
hdc=BeginPaint(hWnd,&ps);
GetClientRect(hWnd,&rect);
DrawText(hdc,TEXT("hello,windows 7"),-1,&rect,
DT_SINGLELINE|DT_CENTER|DT_VCENTER);
EndPaint(hWnd,&ps);
return 0;
case WM_DESTROY:
PostQuitMessage(0);
return 0;
}
return DefWindowProc(hWnd,message,wParam,lParam);
}
效果图: