基于上一篇博客里的简单win32app实现:
// windowsapp.cpp : Defines the entry point for the application.
//
#include "stdafx.h"
HINSTANCE g_hInstance; // 全局变量程序句柄
// 定义子控件编号宏
#define IDC_EDIT_1 0x100
#define IDC_BUTTON_1 0x101
#define IDC_BUTTON_2 0x102
LRESULT CALLBACK WindowProc(HWND hwnd,
UINT uMsg,
WPARAM wParam,
LPARAM LParam){
// 窗口程序
// 处理消息队列的消息
switch (uMsg)
{
case WM_CREATE: // 窗口被创建出来的消息
//创建子控件
//创建文本框
CreateWindow(
"EDIT", // 注册的类名 这里是文本框
"", // 窗口名
WS_CHILD|WS_VISIBLE|WS_VSCROLL|ES_MULTILINE, // 窗口风格
0,
0, // 相对于父窗口的x,y坐标
300,
300, // 宽高
hwnd, // 父窗口的句柄
(HMENU)IDC_EDIT_1, // 菜单句柄如果是子窗口就是身份标识
g_hInstance, // 是属于哪个模块的
NULL // 附加数据 空
);
//创建两个按钮
CreateWindow(
"BUTTON", // 注册的类名 这里是文本框
"设置", // 窗口名
WS_CHILD|WS_VISIBLE, // 窗口风格
300,
0, // 相对于父窗口的x,y坐标
60,
30, // 宽高
hwnd, // 父窗口的句柄
(HMENU)IDC_BUTTON_1, // 菜单句柄
g_hInstance, // 是属于哪个模块的
NULL // 附加数据 空
);
CreateWindow(
"BUTTON", // 注册的类名 这里是文本框
"获取", // 窗口名
WS_CHILD|WS_VISIBLE, // 窗口风格
300,
100, // 相对于父窗口的x,y坐标
60,
30, // 宽高
hwnd, // 父窗口的句柄
(HMENU)IDC_BUTTON_2, // 菜单句柄
g_hInstance, // 是属于哪个模块的
NULL // 附加数据 空
);
break;
case WM_COMMAND: // 按钮发过来的消息
switch (LOWORD(wParam))
{
case IDC_BUTTON_1:
SetDlgItemText(hwnd, IDC_EDIT_1, TEXT("测试"));
break;
case IDC_BUTTON_2:
break;
}
break;
case WM_DESTROY:
PostQuitMessage(0); // 让当前程序退出
break;
}
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);
*/
// 给全局变量句柄赋值
g_hInstance = hInstance;
// 第一步:定义窗口是什么样的
TCHAR className[] = TEXT("My first Window");
WNDCLASS wndclass = {0}; // 窗口类初始化
wndclass.hbrBackground = (HBRUSH)COLOR_WINDOW;//背景色
wndclass.lpszClassName = className; // 窗口类名
wndclass.hInstance = hInstance; // 窗口是属于哪个程序的
wndclass.lpfnWndProc = WindowProc; // 窗口程序(窗口过程函数地址)
// 第二步:注册窗口类
RegisterClass(&wndclass); // 让操作系统知道你这个窗口
// 第三步:创建并显示窗口
HWND hwnd = CreateWindow(
className, // 注册的类名
TEXT("Mz1小工具"), // 窗口名
WS_OVERLAPPEDWINDOW, // 窗口风格
100,
100, // 相对于父窗口的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;
}