Win32 Windows编程 四
2020-12-13 03:20
标签:windows 编程 c++ 应用程序 win32 一 窗口注册和窗口创建的过程 1 Win32窗口程序创建步骤 1.1 WinMain入口函数的定义 1.2 WindowsProc 函数的定义 1.3注册窗口 RegisterClass/RegisterClassEx 1.4创建窗口 CreateWindow /CreateWindowEx 1.5 显示刷新窗口 ShowWindow/UpdateWindow 1.6 消息处理 GetMessage /DisptchMessage 1.7 窗口退出 WM_DESTROY:PostQuitMessage 2 窗口的注册 2.1 窗口的分类 2.1.1 系统全局类按钮 文本框 工具栏 2.1.2 应用程序全局窗口类,可以在EXE和DLL中使用的窗口。 2.1.3 局部窗口类。只能在本模块中使用的窗口类。 2.2 实现窗口的注册 2.2.1 系统全局的窗口类,无需注册直接使用。使用CreateWindow函数,在CLASSNAME中指定系统已经定义好的窗口类型名称即可 2.2.2 应用程序的全局窗口类,需要用代码实现,在注册时需要增加CS_GLOBALCLASS定义实现方式: WNDCLASS wc = { 0 }; wc.style = CS_GLOBALCLASS; ..... RegisterClass( &wc ); 2.2.3 局部窗口类,不能增加CS_GLOBALCLASS定义 使用RegisterClass/RegisterClassEx注册 2.3 窗口类相关函数 RegisterClass/RegisterClassEx 注册 UnregisterClass 注销 GetClassInfo/GetClassInfoEx 获取信息 GetClassName 获取窗口类的名称 GetClassLong/SetClassLong 附加数据的设置和获取 GetWindowLong/SetWindowLong 附加数据的设置和获取 2.4 创建窗口时如何定位窗口类 2.4.1 查找应用程序的局部窗口类。如果找到执行2.4.2,否则执行2.4.3 2.4.2 如果找到名称一致的窗口类,比较HINSTANCE的句柄,如果一致,就使用找到的窗口类信息创建窗口,如果不同,继续查找 2.4.3 如果未找到名称一致的窗口类,会继续在应用程序全局窗口类中查找,如果找到执行2.4.4,否则执行2.4.5 2.4.4 全局窗口找到一致的,使用找到窗口类信息创建窗口 2.4.5 如果未找到,就去系统全局窗口类中查找,如果找到,创建窗口,否则返回失败 3 .窗口创建 3.1 窗口创建函数 CreateWindow/CreateWindowEx 3.2 窗口风格和扩展风格 窗口风格:WS_XXXX定义的风格,是窗口的基本风格 扩展风格:WS_EX_XXXX定义的风格 是窗口的扩展风格 扩展风格需要使用CreareWindowEx WS_OVERLAPPEDWINDOW 层叠式窗口 WS_POPUP 弹出式窗口 WS_CHILD 窗口子窗口 3.3 父窗口和子窗口 3.3.1 CreateWindow时指定父窗口 3,3.2 将窗口的风格增加WS_CHILD 3.3.3 可以使用SetParent 和 GetParent 函数设置和获取指定的父窗 CreateWindow时可以指定父窗口 WS_CHILD SetParent GetParent 其他: MoveWindow 移动窗口 3.4 MDI窗口的创建 3.4.1 主窗口 3.4.2 创建一个MDICLINET窗口 3.4.3 创建一个MDI的子窗口 Win32 Windows编程 四,搜素材,soscw.com Win32 Windows编程 四 标签:windows 编程 c++ 应用程序 win32 原文地址:http://blog.csdn.net/ctxbloger/article/details/33739583typedef struct _WNDCLASSEX {
UINT cbSize; //结构体大小
UINT style;
WNDPROC lpfnWndProc;
int cbClsExtra;
int cbWndExtra;
HINSTANCE hInstance;
HICON hIcon;
HCURSOR hCursor;
HBRUSH hbrBackground;
LPCTSTR lpszMenuName;
LPCTSTR lpszClassName;
HICON hIconSm; //窗口小图标
} WNDCLASSEX, *PWNDCLASSEX;
2.2.4 窗口类的风格
CS_HREDRAW 窗口水平变化,重新绘制窗口
CS_VREDRAW 窗口垂直变化,重新绘制窗口
CS_GLOBALCLASS 创建应程序全局窗口类
CS_DBCLICK 可以接受鼠标双击消息
CS_BYTEALIGNCLIENT 客户区对齐方式 以8的倍数对齐
CS_BYTEALIGNWINDOW 窗口对齐方式
CS_CLASSDC 所有这种类型的窗口使用容一个DC(设备描述表 绘图使用)
CS_OWNDC 每个窗口拥有自己的DC
CS_PARENTDC 使用父窗口的DC
CS_SAVEBITS 是用位图保存窗口,可以提高窗口界面的刷新性能
CS_NOCLOSE 禁止关闭命令
2.2.5 窗口类的附加数据 cbClsExtra
在窗口类的数据信息中添加自己的信息
cbClsExtra 用于添加信息的内存的大小, 一般是4的倍数
SetClassLong 将信息保存到内存中
GetClassLong 将信息从内存中取出
DWORD GetClassLong(
HWND hWnd, // handle to window
int nIndex // offset of value to retrieve
);
2.2.6 窗口附加数据
在窗口的数据信息中添加自己的信息
cbWndExtra 用于添加信息的内存大小
SetWindowLong
LONG SetWindowLong(
HWND hWnd, // handle to window
int nIndex, // offset of value to set
LONG dwNewLong // new value
);
GetWindowLong
LONG GetWindowLong(
HWND hWnd, // handle to window
int nIndex // offset of value to retrieve
);
HWND CreateWindowEx(
DWORD dwExStyle, // extended window style 窗口的扩展样式
LPCTSTR lpClassName, // registered class name
LPCTSTR lpWindowName, // window name
DWORD dwStyle, // window style
int x, // horizontal position of window
int y, // vertical position of window
int nWidth, // window width
int nHeight, // window height
HWND hWndParent, // handle to parent or owner window
HMENU hMenu, // menu handle or child identifier
HINSTANCE hInstance, // handle to application instance
LPVOID lpParam // window-creation data
);