您的位置:首页 > 其它

创建一个windows窗体--学习笔记一

2008-09-11 13:00 579 查看
创建一个windows窗体主要的代码就是以下的内容:

#include "stdafx.h"
#include <windows.h>

LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
// TODO: Place code here.
static TCHAR szAppName[] = "HelloWin";
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.lpszMenuName = NULL;
WndClass.lpszClassName = szAppName;

if(!RegisterClass(&WndClass))
{
MessageBox(NULL,TEXT("This program requires windows NT"),TEXT(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,nCmdShow);
UpdateWindow(hWnd);
while(GetMessage(&msg,NULL,0,0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}

return msg.wParam;
}

//窗口消息处理函数

LRESULT CALLBACK WndProc(HWND hwnd,UINT uMsg,WPARAM wParam,LPARAM lParam)
{
HDC hdc;
PAINTSTRUCT ps;
RECT rect;

switch(uMsg)
{
case WM_PAINT:
hdc = BeginPaint(hwnd,&ps);
GetClientRect(hwnd,&rect);
DrawText(hdc,TEXT("This is a test for HelloWin."),-1,&rect,DT_SINGLELINE|DT_CENTER|DT_VCENTER);
EndPaint(hwnd,&ps);
return 0;
case WM_DESTROY:
PostQuitMessage(0);
return 0;
}
return DefWindowProc(hwnd,uMsg,wParam,lParam);
}

实际上,每一个Windows程序代码中都包括程序的大部分。没人能真正记住此程序的全部写法;通常,Windows程序写作者在开始写一个新程序时总是会复制一个现有的程序,然后再做相应的修改。

Windows函数呼叫

HELLOWIN至少呼叫了18个Windows函数。下面以它们在HELLOWIN中出现的次序列出这些函数以及各自的简明描述:

LoadIcon 加载图标供程序使用。
 
LoadCursor 加载鼠标光标供程序使用。
 
GetStockObject 取得一个图形对象(在这个例子中,是取得绘制窗口背景的画刷对象)。
 
RegisterClass 为程序窗口注册窗口类别。
 
MessageBox 显示消息框。
 
CreateWindow 根据窗口类别建立一个窗口。
 
ShowWindow 在屏幕上显示窗口。
 
UpdateWindow 指示窗口自我更新。
 
GetMessage 从消息队列中取得消息。
 
TranslateMessage 转译某些键盘消息。
 
DispatchMessage 将消息发送给窗口消息处理程序。
 
PlaySound 播放一个声音文件。
 
BeginPaint 开始绘制窗口。
 
GetClientRect 取得窗口显示区域的大小。
 
DrawText 显示字符串。
 
EndPaint 结束绘制窗口。
 
PostQuitMessage 在消息队列中插入一个「退出程序」消息。
 
DefWindowProc 执行内定的消息处理。
 

这些函数均在Platform SDK文件中说明,并在不同的表头文件中声明,其中绝大多数声明在WINUSER.H中。

大写字母标识符

读者可能注意到,HELLOWIN.C中有几个大写的标识符,这些标识符是在Windows表头文件中定义的。有些标识符含有两个字母或者三个字母的前缀,这些前缀后头接着一个底线:

 

这些是简单的数值常数。前缀指示该常数所属的类别,如表3-1所示。

表3-1


前缀类别
CS
窗口类别样式
CW
建立窗口
DT
绘制文字
IDI
图示ID
IDC
游标ID
MB
消息框
SND
声音
WM
窗口消息
WS
窗口样式
奉劝程序写作者不要费力气去记忆Windows程序设计中的数值常数。实际上,Windows中使用的每个数值常数在表头文件中均有相应的标识符定义。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: