windows编程 第4课 注册窗口类

窗口类的概念

        窗口类包含了窗口的各种参数信息的数据结构

        每个窗口都具有窗口类,基于窗口类创建窗口

        每个窗口类都具有一个名称,使用前必须注册到系统

窗口的分类

        系统窗口类

                系统已经定义好的窗口类,所有应用程序都可以直接使用

        应用程序全局窗口类

                由用户自己定义,当前应用程序所有模块都可以使用

        应用程序局部窗口类

                由用户自己定义,当前应用程序中本模块可以使用

系统窗口类 

        不需要注册,直接使用窗口类即可。系统已经注册好了

                例如:按钮 BUTTON  编辑框 EDIT 

        示例:

// 在内存创建button
	HWND btn = CreateWindow("BUTTON", "BUTTON", WS_OVERLAPPEDWINDOW,
		100, 100, 500, 500, NULL, NULL, hInstance, NULL);
	ShowWindow(btn, SW_SHOW);
	// refresh window
	UpdateWindow(btn);

	// 在内存创建EDIT
	HWND edit = CreateWindow("EDIT", "EDIT", WS_OVERLAPPEDWINDOW,
		100, 100, 500, 500, NULL, NULL, hInstance, NULL);
	ShowWindow(edit, SW_SHOW);
	// refresh window
	UpdateWindow(edit);

全局及局部窗口类

        ATOM Register(CONST WNDCLASS *lpWndClass // 窗口类的数据); // 注册成功后,返回一个数字标识,失败返回0,成功返回非0。 将数据写入到操作系统.

        

// 注册窗口类
	WNDCLASS wc = { 0 };
	// 缓冲区
	wc.cbClsExtra = 0;
	wc.cbWndExtra = 0;
	// 窗口属性
	wc.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
	// 使用默认光标
	wc.hCursor = NULL; 
	// 使用默认图标
	wc.hIcon = NULL;
	// 定义窗口处理函数
	wc.lpfnWndProc = WndProc;
	// 窗口名字
	wc.lpszClassName = "Main";
	// 无菜单
	wc.lpszMenuName = NULL;
	// 重绘标志
	wc.style = CS_HREDRAW | CS_VREDRAW;
	// 将以上所有赋值全部写入操作系统
	RegisterClass(&wc);

注册窗口类的结构体

typedef struct WNDCLASS {
    UINT style; // 窗口类的风格
    WNDPROC lpfnWndProc; // 窗口处理函数
    int cbClsExtra; // 窗口类的附加数据buff大小
    int cbWndExtra; // 窗口的附加数据buff的大小
    HINSTANCE hInstance; // 当前模块的实例句柄
    HICON hIcon; // 窗口图标句柄
    HCURSOR hCursor; // 鼠标的句柄
    HBRUSH hbrBackground; // 绘制窗口背景的画刷句柄
    LPCTSTR lpszMenuName; // 窗口菜单的资源ID字符串
    LPCTSTR lpszClassName; // 窗口类的名称,窗口创建的时候要用到该名字 unique唯一咯
}

        style窗口类风格

        

 

创建窗口

 

HWND CreateWindowExA(
    _In_ DWORD dwExStyle, // 窗口的扩展风格
    _In_opt_ LPCSTR lpClassName, // 已经注册的窗口类名称
    _In_opt_ LPCSTR lpWindowName, // 窗口标题栏的名字
    _In_ DWORD dwStyle, // 窗口的基本风格
    _In_ int X, // 位置x
    _In_ int Y, // 位置y
    _In_ int nWidth, // 宽度
    _In_ int nHeight, // 高度
    _In_opt_ HWND hWndParent,
    _In_opt_ HMENU hMenu, // 窗口菜单句柄
    _In_opt_ HINSTANCE hInstance, // 应用程序实例句柄
    _In_opt_ LPVOID lpParam); // 窗口创建时附加参数

创建成功返回窗口句柄

CreateWindowEx 

        匹配查找窗口类-申请一大块内存,将数据信息存入这块内存-返回句柄

        匹配查找失败返回空

创建子窗口

        设置父窗口句柄

        创建风格要增加      WS_CHILD | WS_VISABLE

// wnd为父窗口的句柄
HWND btn = CreateWindow("BUTTON", "BUTTON",
		WS_OVERLAPPEDWINDOW | WS_CHILD | WS_VISIBLE,
		100, 100, 100, 40, wnd, NULL, hInstance, NULL);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C++ Windows 窗口编程的基本方法如下: 1. 引入头文件:`#include <Windows.h>` 2. 定义窗口过程:窗口过程是 Windows 窗口程序的核心,负责处理窗口消息。定义窗口过程的语法如下: ``` LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) ``` 其中,hwnd 是窗口句柄;msg 是消息型;wParam 和 lParam 是消息参数。 3. 注册窗口窗口窗口的模板,定义窗口的语法如下: ``` WNDCLASS wc = {0}; wc.lpfnWndProc = WndProc; // 窗口过程 wc.hInstance = hInstance; // 程序实例句柄 wc.lpszClassName = L"MyWindowClass"; // 窗口名 RegisterClass(&wc); ``` 4. 创建窗口:创建窗口的语法如下: ``` HWND hwnd = CreateWindow(L"MyWindowClass", L"窗口标题", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 800, 600, NULL, NULL, hInstance, NULL); ``` 其中,第一个参数是窗口名;第二个参数是窗口标题;第三个参数是窗口样式;第四个和第五个参数是窗口位置和大小;最后一个参数是父窗口句柄,这设为 NULL。 5. 显示窗口:显示窗口的语法如下: ``` ShowWindow(hwnd, nCmdShow); UpdateWindow(hwnd); ``` 其中,hwnd 是窗口句柄;nCmdShow 是窗口的显示方式,一般设为 SW_SHOW。 6. 处理消息:在消息循环中处理窗口消息,语法如下: ``` MSG msg = {0}; while (GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); } ``` 其中,TranslateMessage 把虚拟键消息转换为字符消息,DispatchMessage 把消息派发给窗口过程处理。 以上就是 C++ Windows 窗口编程的基本方法。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值