`
txf2004
  • 浏览: 6866353 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

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));

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics