C++窗体程序设计(一)窗体类WNDCLASSEX | 您所在的位置:网站首页 › vb是在什么环境下的可视化应用程序 › C++窗体程序设计(一)窗体类WNDCLASSEX |
(本文使用VS2017) 在初步学习了c++之后,我们可以着手设计一个窗口类程序,但在这之前,我们得知道c++里面是怎么设计窗口的。 开始创建窗口之前,我们需要包含几个关键的头文件: #include #include #include当然,如果你和我一样,是这么创建的(如下图),那么VS2017会自动包含一个stdafx.h的预编译头文件,里面包含了很多我们可能要用到的头文件,也就不用再重复输入上面的头文件。 另外通过VS2017创建的桌面应用程序,会自动包含一个窗口创建模板,该模板甚至能直接运行,非常有利于我们的学习。 看函数MyRegisterClass内的语句: 看不懂的地方可以先跳过,照着写就行 WNDCLASSEXW wcex; //WNDCLASSEXW是窗口类,此句的意思是创建一个名为wcex的窗口对象,也就是我们要创建的窗口 wcex.cbSize = sizeof(WNDCLASSEX);//wcex窗口的大小,一般都用sizeof获取标准大小,我也不知道为啥 wcex.style = CS_HREDRAW | CS_VREDRAW;//窗口样式,详见下文 wcex.lpfnWndProc = WndProc; //窗口回调函数,用来记录你在窗口进行的操作,并返回操作导致的结果,后面再细讲。 wcex.cbClsExtra = 0; //窗口类的额外空间,单位:字节数。这地方和下面都比较难理解,这是正常的,不慌。 wcex.cbWndExtra = 0; //窗口实例的额外空间,单位:字节数。 wcex.hInstance = hInstance; //窗口实例句柄, wcex.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_WINDOWSPROJECT4)); //窗口图标句柄 wcex.hCursor = LoadCursor(nullptr, IDC_ARROW);//鼠标光标句柄 wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);//窗口背景颜色句柄,该句表示默认颜色(实际上也可以把+1换成+2/3改颜色) wcex.lpszMenuName = MAKEINTRESOURCEW(IDC_WINDOWSPROJECT4);//所用菜单名称,资源文件中有一个后缀rc的文件记录了菜单方案 wcex.lpszClassName = szWindowClass; //窗口类的名称 wcex.hIconSm = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_SMALL));//窗口的小图标句柄下面对一些重要的对象成员进行解释: ①style 窗口样式 CS_HREDRAW | CS_VREDRAW意味着当窗口宽度或高度发生变化时,窗口将根据窗口大小重新绘制。其中前缀CS表示class type,HREDRAW代表当宽度(H代表水平方向Horizontal)发生改变时进行重绘(Redraw),VREDRAW代表着当高度(V代表垂直方向Vertical)方向发生变化时进行重绘。 除此之外,style还可以设置其他的值,常见的值如下: CS_BYTEALIGNCLIENT 窗口的客户区域以“字符边界”对齐,当系统调整窗口的水平位置时,客户区域的左边坐标是8的整数倍 CS_BYTEALIGNWINDOW 窗口以“字符边界”对齐,当系统调整窗口的水平位置时,客户区域的左边坐标是8的整数倍 CS_CLASSDC 分配一个设备环境并被类中的所有窗体共享。它是可以适用于一个应用程序的若干线程创建的一个相同类的窗体。当多个线程试图同时使用相同的设备环境时,系统只允许一个线程成功地进行绘图操作 CS_DBLCLKS 当用户双击窗口时,将向窗口函数发送鼠标双击消息 CS_GLOBALCLASS 指定此窗体类是一个应用程序全局类。应用程序全局类是由一个在进程中对所有模块有效的exe或dll注册的窗体类 CS_HREDRAW 如果窗口的位置或宽度发生改变,将重绘窗口 CS_NOCLOSE 窗口中的“关闭”按钮不可见 CS_OWNDC 为同一个窗口类中的每个窗口创建一个唯一的设备上下文 CS_PARENTDC 设置子窗口中剪下的矩形区域到父窗口中,以使子窗口可以在父窗口上绘图。指定该风格可以提高应用程序的性能 CS_SAVEBITS 把被窗口遮掩的屏幕图像作为位图保存起来。当该窗口被移动时,Windows操作系统使用被保存的位图来重建屏幕图像 CS_VREDRAW 如果窗口的位置或高度改变,将重绘窗口 ②lpfnWndProc 窗口回调函数 这个函数用于处理用户对窗口的操作,此处可以右键WndProc转到定义,查看该函数的定义。 WndProc包含四个参数:hwnd是要处理窗口的句柄;message是消息ID,代表了不同的消息类型;wParam的值为按下按键的虚拟键码;lParam则存储按键的相关状态信息。 这个函数留到后面再讲。 ③cbClsExtra/cbWndExtra 说实话,这个地方我也没太理解,但我找到一个人讲的比较好,看这个链接: https://blog.csdn.net/zlk1214/article/details/50736674 ④hInstance 窗口实例句柄 句柄可以理解为一个编号,即窗口实例的编号。因为在实际应用中,我们会打开多个窗口,Windows为了区别不同的窗口,所以要给每个窗口设置一个不同的句柄。 ⑤hIcon 窗口图标句柄 hIcon和hIconSm都是表示窗口图标的成员,不同的是,hIcon表示任务栏的图标,hIconSm表示小图标,如图所示: 这样我们就能在WNDCLASSEX对象中使用它了,使: wcex.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_ICON1)); wcex.hIconSm = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_ICON1));//注意到哪里替换了吗?再运行就是我们想要的图标了: ⑥hCursor 光标句柄 改变鼠标光标的语句,目前我也不太会用,估计和改变图标差不多,先就默认吧。 ⑦hbrBackground 背景颜色 (HBRUSH)(COLOR_WINDOW+1),表示windows默认的颜色,+1没有特别的含义,因为滚动条颜色宏被定义成 #define COLOR_SCROLLBAR 0如果不进行+1的话,使用这个颜色就是意外的变成NULL。 我们也可以使用CreateSolidBrush(RGB(255,100,100)),来调制颜色,RBG里面的数字自己调。 如图: 至此,我们已经大致理清了窗体类WNDCLASSEX中各成员参数的含义,但还有更多的问题等待着我们搞明白,因此,未完待续…… |
CopyRight 2018-2019 实验室设备网 版权所有 |