zoukankan      html  css  js  c++  java
  • 修改窗口类名

            在DOC/VIEW结构的应用程序中,要修改主窗口(CMainFrame)的类名,可以利用超类化技术。关于超类化还可以参考浅谈MFC中超类化技术的实现。但是超类化技术对基于对话框基础的应用程序是没有效果。如何修改呢?先看看用超类化改DOC/VIEW结构形式。超类化技术一般有如下几个步骤:
          1.  通过调用 GetClassInfoEx 来获得想要进行超类化操作的窗口类的信息。函数GetClassInfoEx 需要一个指向 WNDCLASSEX 结构的指针,用于当成功返回时填入窗口类的信息。 
          2. 按需要修改 WNDCLASSEX 结构的成员,其中有两个成员必须修改:
                  hInstance 存放程序的实例句柄
                  lpszClassName 指向一个新类名的指针
                  不必修改成员 lpfnWndProc,但大多数情况下还是需要的。但要记住如果要使用函数CallWindowProc
                  调用老窗口的过程,那就必须保存成员 lpfnWndProc 的原值。 
          3. 注册修改完的 WNDCLASSEX 结构,得到一个具有旧窗口类某些特性的新窗口类。
          4. 用新窗口类创建窗口

    由此修改主窗口类名的可以如下操作:
    BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
    {
             if( !CFrameWnd::PreCreateWindow(cs) )
                      return FALSE;
             //修改主窗口类名
             WNDCLASS wndclass;
             //GetClassInfo返回注册窗口类信息
             ::GetClassInfo(AfxGetInstanceHandle(),cs.lpszClass,&wndclass);
             //重新设置窗口类的类名
             wndclass.lpszClassName="New ClassName";
             //重新注册新的窗口类
             VERIFY(AfxRegisterClass(&wndclass));
            // 利用新注册的类名修改主窗口类名
             cs.lpszClass=wndclass.lpszClassName;
     
             return TRUE;
    }

    同样的方法在基于对话框的应用程序里不起作用,因为对话框在过程根本没有进入这个函数,在MS KB中介绍了另一中修改此类程序类名的方法:
    1 修改对话框资源  
       在工作区的资源标签上右键点击最上边的那个“xx  resources”  
             在弹出的对话框中,去掉“Enable  MFC  feature”复选项  
       再打开对话框资源的属性对话框,在右下角的class  name输入你要修改的类名。比如”xxx”   
       再加上“Enable  MFC  feature”复选项  
     
    2 在你的InstInstatce()虚函数中:  
      WNDCLASS  wc  =  {0};  
           ::GetClassInfo(AfxGetInstanceHandle(),"#32770",&wc);  
           wc.lpszClassName="xxx";  
           AfxRegisterClass(&wc);  
     然后重新编译即可。
    原文参考:Q251059 - HOWTO: Provide Your Own Window Class Name for an MFC Dialog Box

  • 相关阅读:
    解决vs 编译的bug“请检查是否是磁盘空间不足、路径无效或权限不够”
    lua 使用正则表达式分割字符串
    cocos2dx通过ndk编译c++库
    通过luac编译lua脚本
    redis的一个bug
    将文件转成16进制过程
    fiddler 模拟发送post请求
    cocostudio的bug(1)
    Eclipse+Tomcat搭建jsp服务器
    iOS本地推送与远程推送
  • 原文地址:https://www.cnblogs.com/hehe520/p/6330133.html
Copyright © 2011-2022 走看看