视窗和消息
进行 Windows 程式设计,实际上是在进行一种物件导向的程式设计(OOP)。
装饰对话方块表面的还有各式各样的按键、单选按钮、核取方块、清单方
块、卷动列和文字输入区域。其中每一个小的视觉物件都是一个视窗。更确切
地说,这些都称为【子视窗】或【控制项视窗】或【子视窗控制项】。
所谓【Windows 给程式发送讯息】,是指 Windows 呼叫程式中的一个函式,该函式的参数描述了这个特定讯息。这种位于 Windows 程式中的函式称为【视窗讯息处理程式】。
视窗通常是在【视窗类别】的基础上建立的。视窗类别标识了处理视窗讯息的视窗讯息处理程式。
Windows 程式开始执行后,Windows 为该程式建立一个【讯息伫列】。这个
讯息伫列用来存放该程式可能建立的各种不同视窗的讯息。程式中有一小段程式码,叫做【讯息回圈】,用来从伫列中取出讯息,并且将它们发送给相应的视窗讯息处理程式。有些讯息直接发送给视窗讯息处理程式,不用放入讯息伫列中。
HELLOWIN 程式
必须把hellowin.wav文件放在工程的同一个夹子下。
#include <windows.h>
#pragma comment(lib, "winmm.lib")//必须依赖这个lib
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
PSTR szCmdLine, int iCmdShow)
{
static TCHAR szAppName[] = TEXT("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); // LoadIcon() 加载图标
wndclass.hCursor = LoadCursor(NULL, IDC_ARROW);// LoadCursor() 加载鼠标光标
wndclass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);// 窗口背景色 GetStockObject() 获取一个图形对象
wndclass.lpszMenuName = NULL;// 窗口菜单
wndclass.lpszClassName = szAppName; // 窗口类名
if (!RegisterClass(&wndclass))// RegisterClass() 为应用程序的窗口注册一个窗口类
{
MessageBox(NULL, TEXT("This program requires Windows NT!"),// 显示消息框
szAppName, MB_ICONERROR);
return 0;
}