MFC单文档应用程序 修改style 光标 图标 背景 等综合

首先我们修改窗体 有2种方法 一是 在窗体创建之前 二是在窗体创建之后 修改 下面就介绍各种修改方法
参考 MSDN window style window styles


用到的函数 GetWindowLong SetWindowLong GetClassLong SetClassLong 在窗体创建之后修改窗体的属性 图标光标 等等
AfxRegisterWndClass函数返回一个已经注册的窗口类的名字以便我们给CREATESTRUCT结构体赋值
RegisterClass注册窗口类
::DefWindowProc 缺省窗口过程 一定要加全局符号 因为 CWnd类也有同名函数否则VC会编译报错
AfxGetInstanceHandle获得应用程序句柄
LoadIcon(NULL,IDI_ERROR); //要使用系统图标 参数一实例的句柄必须设置为NULL 如果 引用了 图标资源那么不能为NULL 应该是AfxGetApp()->m_hInstance;
LoadCursor(NULL,IDC_HELP);

1.

窗体创建之前修改这种修改是通用的我们可以再 从CWnd派生的类中覆盖这个虚函数 SDI程序 主界面由框架窗体 和视图构成
这个函数在窗体创建之前



BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs) //在窗体生成之前传递给MFC底层代码 CreateWindowEx在这里的改变会影响到底层代码
{ //这个CREATESTRUCT的结构体的参数和创建窗口所需要的WNDCLASSEX参数完全一样只是顺序不同
if( !CFrameWnd::PreCreateWindow(cs) ) //window style 参考
return FALSE;


cs.cx=500; //修改大小
cs.cy=500;
cs.style&=~FWS_ADDTOTITLE; //MFC默认这个属性把window caption设置为 文档标题 所以我们要去掉这个属性用&= 取反 cs.lpszName="http://www.xiaowei.org";

//因为 引用关系所作的修改都会影响到MFC创建窗体的底层代码

//如何修改窗体的图标光标背景呢 这些事创建窗口的时候MFC指定的 我们不能也不应该修改MFC底层代码 但是我们可以注册自己的窗口类

/* WNDCLASS wndcls;
wndcls.cbClsExtra=0;
wndcls.cbWndExtra=0;
wndcls.hbrBackground=(HBRUSH)::GetStockObject(BLACK_BRUSH);
wndcls.hCursor=::LoadCursor(NULL,IDC_ARROW);
wndcls.hIcon=::LoadIcon(NULL,IDI_ERROR);
wndcls.hInstance=::AfxGetInstanceHandle();
wndcls.lpfnWndProc=::DefWindowProc;// 缺省窗口过程 因为CWnd类也有一样的函数所以 我们应该加上全局限定符
wndcls.lpszClassName="xiaowei.com";
wndcls.lpszMenuName=NULL;//对于一个MDI程序来说 菜单的创建不是在注册窗口类的时候 所以 NULL
wndcls.style=CS_HREDRAW|CS_VREDRAW; //窗口类型 水平重画 和垂直重绘
RegisterClass(&wndcls);//窗口类一经注册全局 便可以使用 类名字
cs.lpszClass="xiaowei.com"; //吧底层代码的窗口类换成我们注册的

*/



//上面的修改太过繁琐 我们要修改 窗口 的光标 图标 背景其实很简单 AfxRegisterWndClass()函数返回一个 注册的窗口类名
//cs.lpszClass=AfxRegisterWndClass(CS_HREDRAW|CS_VREDRAW,0,0,LoadIcon(NULL,IDI_ERROR));修改成我们注册的窗口类
}


2.窗体创建之后修改 窗体的属性 图标光标 背景 等等 具体看MSDN window styles class styles 有相关的设置参数

在 框架类 或者 视图类的WM_CREATE消息的响应事件中

//SDI的主窗体就是框架 就好像 基于对话框的程序一样 主窗体是对话框
//我们再窗体创建之后通过 SetWindowLong 改变窗口属性 GetWindowLong 获得现有窗口的信息
//::SetWindowLong(this->m_hWnd,GWL_STYLE,WS_OVERLAPPEDWINDOW );
//修改的属性值 参考window styles
::SetWindowLong(this->m_hWnd,GWL_STYLE,::GetWindowLong(this->m_hWnd,GWL_STYLE)&~WS_MAXIMIZEBOX);



//在视图中用 这个函数设置视图的背景 在框架类设置背景 光标无意义 应该砸view类设置 光标和背景
::SetClassLong(this->m_hWnd,GCL_HBRBACKGROUND,(LONG)::GetStockObject(GRAY_BRUSH));

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值