概要
1.关于CreateWindowW我的理解
2.CreateWindowW创建按钮的用法
3.创建串口开关,接收数据显示关闭开关,选择保存地址开关,发送暂停开关,清除接收数据和清除发送数据开关
流程
1.CreateWindowW我的理解
HWND CreateWindowW(
LPCWSTR lpClassName, // 指向窗口类的名称
LPCWSTR lpWindowName, // 指向窗口名称的指针
DWORD dwStyle, // 窗口样式
int x, // 指定窗口的初始水平位置
int y, // 指定窗口的初始垂直位置
int nWidth, // 指定窗口的宽度
int nHeight, // 指定窗口的高度
HWND hWndParent, // 指定窗口的父窗口句柄
HMENU hMenu, // 指定窗口菜单的句柄
HINSTANCE hInstance, // 指向应用程序实例的句柄
LPVOID lpParam // 指向窗口创建数据的指针
);
LPCWSTR lpClassName, // 指向窗口类的名称
我理解的就是这里要输入一个数据表明你绘制的东西是什么,比如按钮就是BUTTON等
LPCWSTR lpWindowName, // 指向窗口名称的指针
我理解是是指向你给的字符串的指针,这个字符串用来给你绘制的东西做名称
DWORD dwStyle, // 窗口样式
我理解的就是窗口绘制出来的表现形式,我使用的WS_TABSTOP | WS_VISIBLE | WS_CHILD | BS_DEFPUSHBUTTON: 这些是按钮的样式。
int x, // 指定窗口的初始水平位置
int y, // 指定窗口的初始垂直位置
int nWidth, // 指定窗口的宽度
int nHeight, // 指定窗口的高度
这里就是位置和宽高不多说了
HWND hWndParent, // 指定窗口的父窗口句柄
我理解的是我们要传入我们要在哪个窗口里绘制的这个窗口的句柄
HMENU hMenu, // 指定窗口菜单的句柄
这个我理解是对我们当前绘制的东西我们自己创建个句柄以方便做标识,这个就是我们绘制的东西的唯一代号,后面要使用就需要它,没有它PC就不知道去使用什么了
HINSTANCE hInstance, // 指向应用程序实例的句柄
我理解的是每个程序运行时都会自动分配一个,用来表示我是什么程序的,我们使用后才能让PC指导原来是这个程序里使用了这个控件,然后根据这个去调用资源,加载信息等
LPVOID lpParam // 指向窗口创建数据的指针
这个是一个指向额外数据的指针,用于传递给窗口,由于大多数时候没有用所以用了nullptr
2.CreateWindowW创建按钮的用法
首先根据上述的说明我们知道先修改创建的主窗口的大小为我需要的550*700像素
修改
MyUartAssist.cpp
// 函数: InitInstance(HINSTANCE, int)
//
// 目标: 保存实例句柄并创建主窗口
//
// 注释:
//
// 在此函数中,我们在全局变量中保存实例句柄并
// 创建和显示主程序窗口。
//
BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
{
hInst = hInstance; // 将实例句柄存储在全局变量中
HWND hWnd = CreateWindowW(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, CW_USEDEFAULT, 700, 600, nullptr, nullptr, hInstance, nullptr);
if (!hWnd)
{
return FALSE;
}
ShowWindow(hWnd, nCmdShow);
UpdateWindow(hWnd);
return TRUE;
}
注意这里因为有默认程序创建的title所以需要把高度增加50像素
// TODO: 在此处添加使用 hdc 的任何绘图代码...
CreateMyButton(hWnd, hInst, (HMENU)IDC_MYBUTTON1, 70, 150, 80, 65, TEXT("串口:开"));
CreateMyButton(hWnd, hInst, (HMENU)IDC_MYBUTTON2, 35, 250, 120, 30, TEXT("打开"));
CreateMyButton(hWnd, hInst, (HMENU)IDC_MYBUTTON3, 35, 340, 120, 30, TEXT("选择地址"));
CreateMyButton(hWnd, hInst, (HMENU)IDC_MYBUTTON4, 70, 450, 80, 75, TEXT("发送:开"));
CreateMyButton(hWnd, hInst, (HMENU)IDC_MYBUTTON5, 510, 420, 80, 20, TEXT("清除接收数据"));
CreateMyButton(hWnd, hInst, (HMENU)IDC_MYBUTTON6, 600, 420, 80, 20, TEXT("清除发送数据"));
MyButton.h
#define IDC_MYBUTTON1 2001 //串口开关
#define IDC_MYBUTTON2 2002 //数据显示关闭开关
#define IDC_MYBUTTON3 2003 //选择保存地址开关
#define IDC_MYBUTTON4 2004 //发送暂停开关
#define IDC_MYBUTTON5 2005 //清除接收数据开关
#define IDC_MYBUTTON6 2006 //清除发送数据开关
绘制出来如图所示
技术名词解释
WS_TABSTOP
允许按钮接收键盘焦点,使得用户可以使用Tab键在控件之间切换。
WS_VISIBLE
使得按钮在创建后立即显示。
WS_CHILD
指定这个按钮是一个子窗口,即它将作为另一个窗口(父窗口)的子控件。
BS_DEFPUSHBUTTON
指定这个按钮是一个默认的推送按钮,通常在对话框中有一个默认按钮,用户可以按Enter键触发该按钮的点击事件。
技术细节
这里绘制的按钮还有些不美观,比如清除发送和接收的按钮文字多了就有些溢出,这些我最后完成了功能来再做修改吧
小结
1.CreateWindowW做了自己的理解
2.画了几个按钮
3.下一节要把按钮的点击变化做了