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

优质内容筛选与推荐>>
1、Create New XML File
2、22323254253245
3、写给java初学者,从零开始学习java开发的完整学习路线
4、Java8使用@sun.misc.Contended避免伪共享(False Sharing)
5、原生js实现ajax封装


长按二维码向我转账

受苹果公司新规定影响,微信 iOS 版的赞赏功能被关闭,可通过二维码转账支持公众号。

    阅读
    好看
    已推荐到看一看
    你的朋友可以在“发现”-“看一看”看到你认为好看的文章。
    已取消,“好看”想法已同步删除
    已推荐到看一看 和朋友分享想法
    最多200字,当前共 发送

    已发送

    朋友将在看一看看到

    确定
    分享你的想法...
    取消

    分享想法到看一看

    确定
    最多200字,当前共

    发送中

    网络异常,请稍后重试

    微信扫一扫
    关注该公众号