主要的过程都写在下面代码中的注释里啦:
// windowsapp.cpp : Defines the entry point for the application.
//
#include "stdafx.h"
LRESULT CALLBACK WindowProc(HWND hwnd,
UINT uMsg,
WPARAM wParam,
LPARAM LParam){
// 窗口程序
// 处理消息队列的消息
switch (uMsg)
{
case WM_DESTROY:
PostQuitMessage(0); // 让当前程序退出
return 0;
}
return DefWindowProc(hwnd, uMsg, wParam, LParam); // 调用默认的消息处理函数
}
int APIENTRY WinMain(HINSTANCE hInstance, // 句柄 模块的起始位置
HINSTANCE hPrevInstance, // 永远为空
LPSTR lpCmdLine,
int nCmdShow)
{
/*
DWORD dwAddr = (DWORD)hInstance;
char szOutBuff[0x80];
sprintf(szOutBuff, "module place: 0x%X
", dwAddr); // 打印模块起始地址
OutputDebugString(szOutBuff);
*/
// 第一步:定义窗口是什么样的
TCHAR className[] = TEXT("My first Window");
WNDCLASS wndclass = {0}; // 窗口类初始化
wndclass.hbrBackground = (HBRUSH)COLOR_BACKGROUND;//背景色
wndclass.lpszClassName = className; // 窗口类名
wndclass.hInstance = hInstance; // 窗口是属于哪个程序的
wndclass.lpfnWndProc = WindowProc; // 窗口程序(窗口过程函数地址)
// 第二步:注册窗口类
RegisterClass(&wndclass); // 让操作系统知道你这个窗口
// 第三步:创建并显示窗口
HWND hwnd = CreateWindow(
className, // 注册的类名
TEXT("我的第一个窗口"), // 窗口名
WS_OVERLAPPEDWINDOW, // 窗口风格
10,
10, // 相对于父窗口的x,y坐标
600,
300, // 宽高
NULL, // 父窗口的句柄
NULL, // 菜单句柄
hInstance, // 是属于哪个模块的
NULL // 附加数据 空
);
// 第四步:显示窗口
ShowWindow(hwnd, SW_SHOW); // 默认形式显示
// 第五步:接收消息并处理
MSG msg; // 用于接收消息的结构体
BOOL bRet;
while((bRet = GetMessage( &msg, NULL, 0, 0)) != 0){// 参数2:取哪个窗口的消息,如果为空,就是取所有的
if (bRet == -1){
// handle the error
}else{
TranslateMessage(&msg); // 转换消息
DispatchMessage(&msg); // 分发消息 给消息处理函数处理
}
}
return 0;
}