前两天老师叫写一个窗口化程序,突击了一下,这里把win32基本结构的代码列出来,方便以后拿来直接使用。
#include <windows.h>
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);//窗口函数的声明
int WINAPI WinMain(HINSTANCE hInstance,//程序化当前实例句柄
HINSTANCE hPrevInstance,//应用程序其他实例句柄
PSTR pCmdLine,//指向程序命令行参数的指针
int nCmdShow //应用程序开始执行时窗口显示方式的整数值标识
{
// 下面依次为窗口类名、窗口句柄、消息结构、窗口类
static TCHAR szAppName[] = TEXT("WAS");
HWND hwnd;
MSG msg;
WNDCLASS wndclass;
// 窗口类初始化
wndclass.style = CS_HREDRAW | CS_VREDRAW;
wndclass.lpfnWndProc = WndProc; // 绑定消息处理过程,窗口处理函数为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;//窗口类型名为‘WAS’
// 注册窗口
if (!RegisterClass(&wndclass)) {
MessageBox(NULL, TEXT("This progrma requires Windows NT !"),
szAppName, MB_ICONERROR);
return 0;
}//注册失败的响应
// 创建窗口并获取窗口句柄
hwnd = CreateWindow(szAppName, // window class name,窗口类名
TEXT("我终于不是cmd了"), // window caption(标题)
WS_OVERLAPPEDWINDOW, // window style,窗口风格
CW_USEDEFAULT, // initial x position,
CW_USEDEFAULT, // initial y position
CW_USEDEFAULT, // initial x size
CW_USEDEFAULT, // initial y size
NULL, // parent window handle,此窗口无父窗口
NULL, // window menu handle,此窗口无主菜单
hInstance, // program instance handle,此程序当前句柄
NULL); // creation parameters,不使用改值
// 显示窗口并更新
ShowWindow(hwnd, nCmdShow);//显示窗口
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) {
static int cxClient, cyClient;
HDC hdc;
PAINTSTRUCT ps;
switch (message) {
case WM_SIZE:
cxClient = LOWORD(lParam);
cyClient = HIWORD(lParam);
return 0;
case WM_PAINT:
hdc = BeginPaint(hwnd, &ps);
EndPaint(hwnd, &ps);
return 0;
case WM_DESTROY:
PostQuitMessage(0);
return 0;
}
return DefWindowProc(hwnd, message, wParam, lParam);
}