从0写软件-Win32应用代码模板
694 字
3 分钟
从0写软件-Win32应用代码模板

本篇文章主要实现内容:
- 注册一个窗口
- 在窗口中绘制控件,并实现最简单的交互(输入字符串并设置文本为输入的字符串)
参考文档:
代码:
注释都在代码里了
/*代码编写&本篇文档编写 by AZX
主要实现内容:1.注册一个窗口2.在窗口中绘制控件,并实现最简单的交互(输入字符串并设置文本为输入的字符串)
可参考文档:https://learn.microsoft.com/zh-cn/windows/win32https://learn.microsoft.com/zh-cn/windows/win32/controlshttps://learn.microsoft.com/zh-cn/windows/win32/api/winuser*/
#define WIN32_LEAN_AND_MEAN#include <windows.h>#include <stdlib.h>#include <malloc.h>#include <memory.h>#include <tchar.h>
//设置类名&窗口名全局变量const wchar_t CLASS_NAME[] = L"WindowsSystemTest";const wchar_t WINDOW_NAME[] = L"WindowsSystemTest";
HWND hwnd, edit1, button1, static1;
LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
void OnSize(HWND hwnd, int width, int height);
int WINAPI wWinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, PWSTR pCmdLine, int nCmdShow){
//设置窗口类 WNDCLASS WndCLASS = {}; WndCLASS.lpfnWndProc = WindowProc; // 使用自定义的过程函数,如果你懒得写这个函数,可以填 DefWindowProc 使用默认过程,这样就可以删掉WindowProc函数 WndCLASS.hInstance = hInstance; WndCLASS.lpszClassName = CLASS_NAME; WndCLASS.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH);
//注册窗口类 RegisterClass(&WndCLASS);
//创建主窗口,以 CLASS_NAME 为类名,WINDOW_NAME 为窗口名,使用默认的大小和位置,和默认的窗口样式(WS_OVERLAPPEDWINDOW) hwnd = CreateWindowExW( 0L, CLASS_NAME, WINDOW_NAME, WS_OVERLAPPEDWINDOW | WS_CLIPCHILDREN, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL);
//检查窗口是否被成功创建,如果是,显示出来,否则退出 if (!hwnd) return 0; else ShowWindow(hwnd, nCmdShow);
//获取主窗口字体,方便统一字体 int dpi = GetDpiForWindow(hwnd); int pt = 10; HFONT hFont = CreateFontW(-MulDiv(pt, dpi, 72), 0, 0, 0, FW_NORMAL, 0, 0, 0, DEFAULT_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, CLEARTYPE_QUALITY, VARIABLE_PITCH | FF_DONTCARE, L"Segoe UI");
//创建窗口控件 edit1 = CreateWindowW(L"EDIT", L"请输入文本", WS_CHILD | WS_VISIBLE | ES_MULTILINE, 10, 10, 114, 20, hwnd, (HMENU)2, hInstance, NULL); button1 = CreateWindowW(L"BUTTON", L"确定", WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON | WS_TABSTOP, 10, 35, 114, 20, hwnd, (HMENU)1, hInstance, NULL); static1 = CreateWindowW(L"static", L"文本", WS_CHILD | WS_VISIBLE | SS_CENTER, 10, 60, 114, 20, hwnd, (HMENU)3, hInstance, NULL);
//为每个控件统一主窗口的字体 SendMessage(edit1, WM_SETFONT, (WPARAM)hFont, TRUE); SendMessage(button1, WM_SETFONT, (WPARAM)hFont, TRUE); SendMessage(static1, WM_SETFONT, (WPARAM)hFont, TRUE);
//重复执行判断逻辑知道窗口关闭 MSG msg; while (GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg);
//这里添加窗口操作的逻辑
}
return 0;}
LRESULT CALLBACK WindowProc( HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam){ switch (uMsg) { //控件传入信息 case WM_COMMAND: { switch (LOWORD(wParam)) { case 1: //1为按钮的ID //读取并设置文字内容 wchar_t EditText[114]; GetWindowTextW(edit1, EditText, 114); SetWindowTextW(static1, EditText); break; } return 0; } //窗口绘制 case WM_PAINT: {
PAINTSTRUCT ps; HDC hdc = BeginPaint(hwnd, &ps);
//这里填入窗口绘制的逻辑
EndPaint(hwnd, &ps); return 0; } // 窗口关闭 case WM_CLOSE: { if (MessageBox(hwnd, L"确定退出?", WINDOW_NAME, MB_OKCANCEL) == IDOK) DestroyWindow(hwnd); return 0; } //窗口销毁 case WM_DESTROY: { PostQuitMessage(0); return 0; } //其余的信息逻辑 }
//对于这个函数没有处理的一些消息,由默认方式处理 return DefWindowProc(hwnd, uMsg, wParam, lParam);}支持与分享
如果这篇文章对你有帮助,欢迎分享给更多人或打赏支持!
相关文章智能推荐
1
快速幂算法实现
算法利用C++实现快速幂算法,以https://www.luogu.com.cn/problem/P1226为参考
2
KMP算法实现
算法利用C++实现KMP算法,以https://www.luogu.com.cn/problem/P3375为参考
3
下载/编译/使用 NeonVision
NeonVision保姆级教你下载和编译及使用NeonVision
4
关于我的OI代码缺省源
OI以后懒得写了直接复制
5
一些冷门但好用的STL容器
OISTL真的很好用
随机文章随机推荐











