Posted on 2008-10-17 20:59
千张 阅读(813)
评论(1) 编辑 收藏 引用 所属分类:
C++/VS.NET
<1>.入口函数WinMain中的代码
1.窗口类WNDCLASS
设置窗口的各个参数
WNDCLASS wndcls;
wndcls.cbClsExtra=0;
wndcls.cbWndExtra=0;
wndcls.hbrBackground=(HBRUSH)GetStockObject(BLACK_BRUSH); //指定窗体的颜色。(画刷)
wndcls.hCursor=LoadCursor(0,IDC_IBEAM);
wndcls.hIcon=LoadIcon(0,IDI_WARNING);
wndcls.hInstance=hInstance;
wndcls.lpfnWndProc=WinSunProc;
wndcls.lpszClassName="myfirst2006";
wndcls.lpszMenuName=NULL;
wndcls.style=CS_HREDRAW | CS_VREDRAW;
2.注册窗口函数
RegisterClass(&wndcls);
3.产生窗口
HWND hwnd;
hwnd=CreateWindow("myfirst2006","我的第一个窗口!",WS_OVERLAPPEDWINDOW,
100,100,600,400,NULL,NULL,hInstance,NULL);
4.显示窗口
ShowWindow(hwnd,SW_SHOWNORMAL);
5.更新窗口
UpdateWindow(hwnd);
6.消息循环
MSG msg;
while(GetMessage(&msg,NULL,0,0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
TranslateMessage转换消息,转换WM_CHAR消息,若不用,则不能收到WM_CHAR消息。
DispatchMessage将消息分发出去,将收到的消息传到操作系统,然后操作系统调用窗口过程函数,也就是对 设计窗口时的回调函数进行处理。
<2>.回调函数WinSunProc中的代码:
举个例子:
switch(uMsg)
{
case WM_CHAR:
char szchar[20];
sprintf(szchar,"char is %d",wParam);
MessageBox(hwnd,szchar,"myfirst2006",0);
break;
case WM_LBUTTONDOWN:
MessageBox(hwnd,"mouse click","myfirst",0);
HDC hdc;
hdc=GetDC(hwnd);
TextOut(hdc,100,100,"这是我的第一个窗口,哈哈!",strlen("这是我的第一个窗口,哈哈!"));
ReleaseDC(hwnd,hdc);
break;
case WM_PAINT:
HDC hDc;
PAINTSTRUCT ps;
hDc=BeginPaint(hwnd,&ps);
TextOut(hDc,50,50,"hello my windows!",strlen("hello my windows!"));
EndPaint(hwnd,&ps);
break;
case WM_CLOSE:
if(IDYES==MessageBox(hwnd,"是否真的退出程序?","myfirst",MB_YESNO))
{
DestroyWindow(hwnd);
}
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hwnd,uMsg,wParam,lParam);
}
uMsg为消息标识符
WM_CHAR消息为字符类消息
WM_LBUTTONDOWN为鼠标消息,WM_PAINT为窗口重绘消息,当窗口大小发生变化时,点鼠标左键出来的那行文字又没有了,因为窗口又重新粉刷了一遍
WM_CLOSE为关闭窗口的消息
WM_DESTROY为销毁窗口的消息。
HDC是一个DC的句柄,它将窗口与GDI(Graphics Device Interface图像设备接口)连接起来,如果程序需要在窗 口上绘制图形,则需要建立一个DC设备,即定义一个HDC变量。
在生成窗口时,HWND使操作系统分配的句柄与我的窗口相关并保存。
HINSTANCE产生了一个与我们的程序相关的实例,HINSTANCE变量是操作系统给其赋值。