MFC主框架和视类PreCreateWindow()函数学习

在VC++生成的单文档应用程序中,主框架类和视类均具有PreCreateWindow函数;

从名字可知,可在此函数中添加一些代码,来控制窗口显示后的效果;

并且它有注释说明,

Modify the Window class or styles here by modifying the CREATESTRUCT cs

在这里通过修改CREATESTRUCT类型变量cs来修改窗口类或者窗口风格;

在Win32 API中窗口类是如下一个结构体;

typedef struct _WNDCLASSEX {

UINT cbSize; //该结构的字节数

UINT style; //窗口类的风格

WNDPROC lpfnWndProc; //窗口过程

int cbClsExtra;

int cbWndExtra;

HANDLE hInstance; //该窗口类的窗口过程所属的应用实例

HICON hIcon; //该窗口类所用的像标

HCURSOR hCursor; //该窗口类所用的光标

HBRUSH hbrBackground; //该窗口类所用的背景刷

LPCTSTR lpszMenuName; //该窗口类所用的菜单资源

LPCTSTR lpszClassName; //该窗口类的名称

HICON hIconSm; //该窗口类所用的小像标

} WNDCLASSEX;

窗口风格是Windows预定义的以 WS_ 开头的一些常量;

WS_BORDER 窗口具有细线边框

WS_CAPTION 窗口具有标题栏, (包含 WS_BORDER 样式)

WS_CHILD 窗口是子窗口;具有此样式的窗口不能有菜单栏;此样式不能与 WS_POPUP 样式一起使用;

WS_CHILDWINDOW 与 WS_CHILD 样式相同;

等等;

在视类的PreCreateWindow函数中设置窗口样式多数不起作用;一般都在主框架类的PreCreateWindow函数中设置;

CREATESTRUCT结构体是MFC定义的;

typedef struct tagCREATESTRUCT

{

LPVOID lpCreateParams; //指向将被用于创建窗口的数据的指针。

HANDLE hInstance; //标识了拥有新窗口的模块的模块实例的句柄。

HMENU hMenu; //标识了要被用于新窗口的菜单。如果是子窗口,则包含整数ID。

HWND hwndParent; //标识了拥有新窗口的窗口。如果新窗口是一个顶层窗口,这个参数可以为NULL。

int cy; //指定了新窗口的高。

int cx; //指定了新窗口的宽。

int y; //指定了新窗口的左上角的y轴坐标。

int x; //指定了新窗口的左上角的x轴坐标。

LONG style; //指定了新窗口的风格。

LPCSTR lpszName; //指向一个以null结尾的字符串,指定了新窗口的名字。

LPCSTR lpszClass; //指向一个以null结尾的字符串,指定了新窗口的Windows类名

DWORD dwExStyle; //指定了新窗口的扩展风格。

} CREATESTRUCT;

之前有一个MFC程序在窗口显示一些文字,下面看一下;

cpp 复制代码
BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
{
	if( !CFrameWnd::PreCreateWindow(cs) )
		return FALSE;
	// TODO: Modify the Window class or styles here by modifying
	//  the CREATESTRUCT cs
	cs.cx = 300; 
    cs.cy = 300;
	cs.x=10;
	cs.y=10;
	//cs.style &= ~WS_BORDER;
	cs.style&=~FWS_ADDTOTITLE;
	cs.style |= WS_HSCROLL | WS_VSCROLL;
	//自定义标题
	cs.lpszName = "HelloWorld";
	return TRUE;
}

指定了窗口的大小,窗口左上角坐标,具有滚动条,修改了MFC的默认窗口标题;

cs.lpszName = "HelloWorld" 这句要先有 cs.style&=~FWS_ADDTOTITLE 这句才起作用;

有时间继续;

相关推荐
智者知已应修善业3 分钟前
【51单片机使用IO组赋值方法实现无源蜂鸣器响时LED12亮不响时34亮】2024-3-7
c++·经验分享·笔记·算法·51单片机
.千余5 分钟前
【C++】深挖STL list底层:解迭代器与节点存储逻辑
开发语言·c++·笔记·学习·其他
雪落漂泊7 分钟前
C++ 继承与多态(上)
开发语言·c++
聆风吟º13 分钟前
【C++11新章】列表初始化详解
开发语言·c++·列表初始化
alwaysrun14 分钟前
C++之灵活易用的YAML解析库yaml-cpp
c++·后端·程序员
Shadow(⊙o⊙)26 分钟前
进程间通信0.0-pipe()匿名管道,详细分析进程池调度队列执行逻辑,进程池模拟实现。
linux·运维·服务器·开发语言·c++
lcj251129 分钟前
【list】【手撕 STL】List 容器全解析!迭代器 / 增删改查 / 去重排序,面试必背的核心考点!
c++·面试·list
指尖的爷33 分钟前
C++头文件的作用
开发语言·c++
智者知已应修善业1 小时前
【51单片机0.1秒计时到21.0时点亮LED】2024-1-5
c++·经验分享·笔记·算法·51单片机
zh路西法1 小时前
【rosbridge-websocket】跨网络的ROS1与ROS2通讯法(上)
linux·网络·c++·python·websocket·网络协议