没有合适的资源?快使用搜索试试~ 我知道了~
首页C++Windows窗口编程方法解
C++Windows窗口编程方法解
需积分: 50 18 下载量 22 浏览量
更新于2023-05-28
评论
收藏 190KB DOC 举报
C++ Windows的窗口编程方法解释,包括MFC方式的SDI、MDI方式
资源详情
资源评论
资源推荐
C++Windows 编程之注册窗口类
我们用 Visual Studio 创建一个 win32 项目上会自动生成一个注册窗口类。如下:
//
// 函数: MyRegisterClass()
//
// 目的: 注册窗口类。
//
ATOM MyRegisterClass(HINSTANCE hInstance)
{
WNDCLASSEX wcex;
wcex.cbSize = sizeof(WNDCLASSEX);
wcex.style = CS_HREDRAW | CS_VREDRAW;
wcex.lpfnWndProc = WndProc;
wcex.cbClsExtra= 0;
wcex.cbWndExtra= 0;
wcex.hInstance = hInstance;
wcex.hIcon= LoadIcon(hInstance, AKEINTRESOURCE(IDI_WIN32PROJECT5));
wcex.hCursor= LoadCursor(NULL, IDC_ARROW);
wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
wcex.lpszMenuName= MAKEINTRESOURCE(IDC_WIN32PROJECT5);
wcex.lpszClassName = szWindowClass;
wcex.hIconSm= LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_SMALL));
return RegisterClassEx(&wcex);
}
这些都是是什么意思呢?WNDCLASSEX 属于一个窗台类结构原型为:
typedef struct
{
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;
cbSize 存储表示该结构大小的字节数,通常以 sizeof(WNDCLASSEX)的形式对该域进行设置。
style 存储表示窗口类风格的整数,它决定了该窗口的外观和内在特征。Windows 以预先给了一些
标准的外观,供用户选择。如下:
当窗口的垂直位置或窗口的高度值发生变化时,是窗口能够重新绘制其用户区域的内容
Constant/value Description
CS_BYTEALIGNCLIENT
0x1000
在 X 轴方向上以某边界值对齐窗口的用户区域,该属性
影响窗口的宽度和显示位置的水平坐标。
CS_BYTEALIGNWINDOW
0x2000
在 X 轴方向上以某个边界值对齐窗口,该属性影响窗口
的宽度和显示位置的水平坐标。
CS_CLASSDC
0x0040
为窗口分配一个该类的所有窗口都共享的设备描述表。由
于窗口类是进程指定的,一个应用中的多个线程就可能创
建属于同一个窗口了的窗口,这些线程也就可以尝试同时
使用设备描述表,但此时,系统只允许一个线程成功完成
其图形输出。
CS_DBLCLKS
0x0008
用户在属于该窗口类的窗口中双击鼠标时将鼠标双击消息
发送到窗口处理函数。打开该函数才支持鼠标双击功能。
CS_DROPSHADOW
0x00020000
Windows XP 中允许窗口的拖拉阴影效果。通过
SPI_SETDROPSHADOW 打开或关闭该功能。
CS_GLOBALCLASS
0x4000
将窗口类指定为一个应用全局类,所谓的应用全局类就是
在 exe 或 dll 中定义的窗口类,加载该 exe 或 dll 的进程
都可以创建属于该窗口类的窗口。
CS_HREDRAW
0x0002
当窗口的水平位置或窗口的宽度值发生变化时,是窗口能
够重新绘制其用户区域的内容
CS_NOCLOSE
0x0200
不能使用窗口菜单中的“关闭”功能
CS_OWNDC
0x0020
为该类的每个窗口分配独立的设备描述表。
CS_PARENTDC
0x0080
允许子窗体使用父窗体的设备描述表。
CS_SAVEBITS
0x0800
当窗口中部分内容被遮挡时,自动保存图像,当被遮挡的
区域恢复时,使用自动保存的图形来进行自动恢复。
CS_VREDRAW
0x0001
如果窗口的位置或高度改变,将重绘窗口
lpfnWndProc 指向窗口处理函数(回调函数)。
处理窗口事件,像单击鼠标会怎样,右击鼠标会怎样,都是由此函数控制的。存储指向窗口处理函
数的指针。
cbClsExtra 为窗口类的额外信息做记录,初始化为 0。存储指向指定分配给窗口类结构的附加字节
数。
cbWndExtra 记录窗口实例的额外信息,系统初始为 0。如果程序使用 WNDCLASSEX 注册一个从
资源文件里创建的对话框,则此参数必须设置为 DLGWINDOWEXTRA
hInstance 存储包含窗口类的窗口处理函数的实例的句柄。窗口类结构已经把窗口的基本属性包含
在其中。由于每个程序都有唯一的实例句柄,因此,窗口类的 hInstance 属性直接表述了该窗口的
性质。即每个程序可以设置各自独立的窗口类。
hIcon 存储该类窗口的图标的句柄。一个 Windows 程序有两个与其相关的图标,一个是 32*32 位
图的标准图标,称为大图标,另一个是 16*16 位图的小图标。hIcon 存储的是标准图标。该域必须
是图标资源的句柄,若为 NULL,这系统提供一个默认的图标。
hCursor 存贮表示窗口类光标的句柄,该域必须是一个光标资源的句柄。
一般情况下使用一个内置光标。常见内置光标如下表:
光标宏 形状
IDC_ARROW
标准箭头
IDC_CROSS
十字线
IDC_HAND
手
IDC_WAIT
沙漏
IDC_SIZENS
上下双箭头
IDC_SIZEWE
左右双箭头
IDC_SIZEALL
四个方向箭头
IDC_HELP
箭头和问好
IDC_IBEAM
垂直 I 字形
IDC_SIZENESW
右下角和左上角算箭头
IDC_SIZENWSE
左上角和右下角算箭头
hbrBackground 窗口类的背景刷,为背景刷句柄,也可以为系统颜色值,如果颜色值已给出,则
必须转化为以下的 HBRUSH 的值
· COLOR_ACTIVEBORDER
· COLOR_ACTIVECAPTION
· COLOR_APPWORKSPACE
· COLOR_BACKGROUND
· COLOR_BTNFACE
· COLOR_BTNSHADOW
· COLOR_BTNTEXT
· COLOR_CAPTIONTEXT
· COLOR_GRAYTEXT
· COLOR_HIGHLIGHT
· COLOR_HIGHLIGHTTEXT
· COLOR_INACTIVEBORDER
· COLOR_INACTIVECAPTION
· COLOR_MENU
· COLOR_MENUTEXT
· COLOR_SCROLLBAR
· COLOR_WINDOW
· COLOR_WINDOWFRAME
· COLOR_WINDOWTEXT
lpszMenuName 存储以空结尾的指定类菜单资源名的字符串指针,类菜单资源名已经在资源文件
中进行了定义。如果使用整数来表示菜单,则需要使用 MAKEEINITSOURCE 宏。如果该域为
NUILL,属于该窗口类的窗口没有默认菜单。
lpszClassName 存储以空结尾的字符串的指针,或存储一个原子元素(ATOM)。 ATOM 本质上
也是一个整数,通常用来做唯一标识。如果该域是一个原子元素,那么它必须是以前调用
RegisterClass 或 RegisterClassEx 函数所创建的类原子元素,该原子元素存于 lpszClassName
的低位字节中,其高位必须为 0;如果 lpzeClassName 是一个字符串,则它指定窗口类的名字。
hIConSm 存储该类窗口小图标的句柄。
C++Windows 编程之创建窗口
Windows 编程之注册窗口类介绍了注册窗口类。接下来就是创建窗体。
我们用 Visual Studio 创建一个 win32 项目上会自动生成一个创建窗体函数。如下:
//函数: InitInstance(HINSTANCE, int)
//
//目的: 保存实例句柄并创建主窗口
//
//注释:
//
//在此函数中,我们在全局变量中保存实例句柄并
//创建和显示主程序窗口。
//
BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
{
HWND hWnd;
hInst = hInstance; // 将实例句柄存储在全局变量中
hWnd = CreateWindow(
szWindowClass,
szTitle,
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
0,
CW_USEDEFAULT,
0,
NULL,
NULL,
hInstance,
NULL
);
if (!hWnd)
{
return FALSE;
}
ShowWindow(hWnd, nCmdShow);
UpdateWindow(hWnd);
return TRUE;
}
下面一句一句解释:
HWND hWnd;
h 是类型描述,表示句柄, Wnd 是变量对象描述,表示窗口,所以 hWnd 表示窗口句柄。通俗地
说,如果把一个到处跑的人当作指针的话,那么 HWND 就是该人的身份证----我想应该是身份证号
剩余26页未读,继续阅读
tzhk
- 粉丝: 1
- 资源: 6
上传资源 快速赚钱
- 我的内容管理 收起
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
会员权益专享
最新资源
- zigbee-cluster-library-specification
- JSBSim Reference Manual
- c++校园超市商品信息管理系统课程设计说明书(含源代码) (2).pdf
- 建筑供配电系统相关课件.pptx
- 企业管理规章制度及管理模式.doc
- vb打开摄像头.doc
- 云计算-可信计算中认证协议改进方案.pdf
- [详细完整版]单片机编程4.ppt
- c语言常用算法.pdf
- c++经典程序代码大全.pdf
- 单片机数字时钟资料.doc
- 11项目管理前沿1.0.pptx
- 基于ssm的“魅力”繁峙宣传网站的设计与实现论文.doc
- 智慧交通综合解决方案.pptx
- 建筑防潮设计-PowerPointPresentati.pptx
- SPC统计过程控制程序.pptx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0