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

 

 

 

 

 

 

时间: 2024-09-06 22:53:04

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

MFC单文档应用程序显示图像

1 利用VS2010向导创建一个MFC单文档应用程序MFCTest 2 在MFCTestView.h中引用<atlimage.h>,并创建一个CImage对象 #include <atlimage.h> private: CImage image; 3 打开资源文件,选中Menu下面的IDR_MAINFRAME,添加一个新的菜单项"打开图像",修改其ID为IDM_OPEN,再点击鼠标右键,添加事件处理程序,在弹出的对话框的列表中选择CMFCTestView 4

做一个简单的VC++的mfc单文档应用程序

问题描述 做一个简单的VC++的mfc单文档应用程序 帮忙做一个基于VC++6.0的mfc单文档应用程序(绘图),有菜单栏工具栏和快捷菜单,用到分割窗口,组合框,文档序列化 解决方案 google Scribble 示例:MDI 绘图应用程序 解决方案二: 就你的需求,不要写一行程序,用向导生成,勾选切分视图和从CFormView继承,放上组合框就好了.文档序列化是默认支持的. 解决方案三: 解决方案四: 如果你要画图,可以直接下载msdn里面切分视图画图的那个例子,然后加上一个controlb

ceditview-求助!MFC 单文档多视图 CEditView加载的背景图片被挡住的问题

问题描述 求助!MFC 单文档多视图 CEditView加载的背景图片被挡住的问题 貌似是加载的背景图片被输入的那一行的背景覆盖了.. 如图,其中圈起来的就是CEditView,视图底部还能看见背景图片的一部分,但光标所在的那一行就没有图片的显示了,而且我如果按了回车换行,下面一行也会被覆盖..以下代码. 视图类中相关变量: CEdit* m_pCtrlREdit;// 内嵌的CEditCtrl控件指针 CImage m_ImageLogo; // 图片 UINT widthPic height

mfc单文档-VC++程序调试,出现winocc.cpp中的问题!!!

问题描述 VC++程序调试,出现winocc.cpp中的问题!!! 我自己编写了一个单文档的小程序,然后运行程序之后出现中断,进过调试寻找到是winocc.cpp中的void CWnd::GetProperty和void CWnd::SetProperty两个函数中的_ASSERT(m_pCtrlSite != NULL);均出现错误.希望大神能帮忙指出错误类型!!!谢谢!!! 这是出错部分代码!! float* try::fun1( )//创建指定区域 { GET dlg; dlg.DoMod

【数字图像处理】 二.MFC单文档分割窗口显示图片

本文是讲述<数字图像处理>系列文章,继上篇讲述BMP格式图片和显示后,该篇讲述如何对单文档进行分割.主要是采用CSplitterWnd静态分割窗口显示图片等相关知识.本文主要结合自己的课程及常用图片软件讲解. 一. CSplitterWnd静态分割窗口 1.CSplitterWnd类基础知识(该部分引用:百度百科和麦田里的稻草人博客)CSplitterWnd类提供一个分离器窗口的功能,分隔器窗口是一个包含有多个窗格的窗口.窗格通常是应用程序特定的由CView派生的对象,但它也可以是具有适当子窗

mfc 单文档应用问题!

问题描述 mfc 单文档应用问题! 我现在要做一个程序,根据账号登录后,通过不同账号权限加载不同的页面.登录教授页 面后可以在此页面上点击"显示波形"按钮,出现一个新的界面显示波形. 我现在的思路是:在SDI程序中,app::initinstance中加载登录和其他页面,用view做 波形显示页面.可是现在我不知道怎么跳转到波形界面,关键是关闭波形洁面后还能跳 转到当前页面! 求解答!! 解决方案 OpenGL在MFC单文档中的应用MFC单文档应用程序问题

在MFC单文档程序中,如何在子对话框类中访问视类中的一个变量?

问题描述 在MFC单文档程序中,如何在子对话框类中访问视类中的一个变量? 如题,小弟最近遇到一个问题,新建一个单文档程序,并在其中引入对话框资源.我想在视类的OnDraw()函数中通过响应视类的一个变量的变化来改变视类窗口中图形的状态,而该视类变量的变化是由对话框中的一个控件控制的,这个控件是由旋钮控件和编辑控件捆绑而成的.在网上看了一些资料,试了其中的一些方法,都没能成功.论坛中高手众多,想请热心的高手们给个解决方法,在此先谢过了!能给个相似的例子的更好! 解决方案 要么你把那个变量定义成静态

MFC单文档程序编程 最小化托盘对话框没有隐藏而是以标题栏的形式显示的呢?

问题描述 MFC单文档程序编程 最小化托盘对话框没有隐藏而是以标题栏的形式显示的呢? MFC单文档程序编程 最小化托盘某个对话框的时候 为什么对话框没有隐藏而是以标题栏的形式显示的呢 void CBeginningTimeDlg::OnSysCommand(UINT nID, LPARAM lParam) { // TODO: Add your message handler code here and/or call default CWnd *pMainFrameWnd , *pSettin

当文档分割-请问mfc单文档分割窗口后,原来可以显示图形的VIEW函数怎么修改才能让其显示原来发的图形。

问题描述 请问mfc单文档分割窗口后,原来可以显示图形的VIEW函数怎么修改才能让其显示原来发的图形. BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext) { // TODO: 在此添加专用代码和/或调用基类 if(m_splitter.CreateStatic(this,1,2)==NULL) return FALSE; CRect rect; GetClientRect(&rect);