zoukankan      html  css  js  c++  java
  • VS2008SP1中CDialogEx的使用问题及解决

    系统环境:Windows 7
    软件环境:Visual Studio 2008 SP1
    本次目的:建立一个CDialogEx的对话框

          我们知道在VS2008SP1引进了BCG第三方控件,可以使MFC界面编程容易些,但是关于这方面的资料并不多。可能是我使用的系统因素,在建立对话框时,选择“生成的类”基于CDialogEx后,发现代码并没有把创建的对话框派生CDialogEx ,而还是派生自CDialog。所以我们只能手动改之。对于一个新建立的对话框,这里我建立的名字为Test 工程,我们开始进行以下步骤:
    1. 在TestDlg.h 中,修改以下地方:

    class CTestDlg : public CDialogEx    //原本为CDialog
    {····};

    2. 在TestDlg.cpp 中,修改以下地方:

    CTestDlg::CTestDlg(CWnd* pParent /*=NULL*/)
        : CDialogEx (CTestDlg::IDD, pParent)       //原本为CDialog(CTestDlg::IDD, pParent)
    {
        m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
    }

    void CTestDlg::DoDataExchange(CDataExchange* pDX)
    {
        CDialogEx ::DoDataExchange(pDX);    //原本为CDialog::DoDataExchange(pDX); 
    }

    BEGIN_MESSAGE_MAP(CTestDlg, CDialogEx )         //原本为BEGIN_MESSAGE_MAP(CTestDlg, CDialog)    
        ON_WM_SYSCOMMAND()
        ON_WM_PAINT()
        ON_WM_QUERYDRAGICON()
        //}}AFX_MSG_MAP
    END_MESSAGE_MAP()

    BOOL CTestDlg::OnInitDialog()
    {
        CDialogEx ::OnInitDialog();         //原本为CDialog::OnInitDialog()
         ····
    }

    void CTestDlg::OnSysCommand(UINT nID, LPARAM lParam)
    {
        ·······
        else
        {
            CDialogEx ::OnSysCommand(nID, lParam);       //原本为CDialog::OnSysCommand(nID, lParam);
        }
    }

    void CTestDlg::OnPaint()
    {
       ········
        else
        {
            CDialogEx ::OnPaint();        //原本为CDialog:::OnPaint();
        }
    }

    3.一共修改七个地方,现在编译运行,就可以正常使用了。

    在MSDN中,CDialogEx 有两个比较经常用到的方法,SetBackgroundColor SetBackgroundImage ,分别是设置背景颜色和背景图片。一个函数就可以搞定背景颜色了,就不必像上次 我写的那么麻烦了。例如,背景颜色,只要在对话框初始化函数OnInitDialog() 中添加以下代码就行了:

    SetBackgroundColor(RGB(255,0,255));

    效果如下:

    对于背景图片SetBackgroundImage 的设置,MSDN上定义的是:

    void SetBackgroundImage(
       HBITMAP hBitmap,
       BackgroundLocation location=BACKGR_TILE,
       BOOL bAutoDestroy=TRUE,
       BOOL bRepaint=TRUE 
    );
    BOOL SetBackgroundImage(
       UINT uiBmpResId,
       BackgroundLocation location=BACKGR_TILE,
       BOOL bRepaint=TRUE 
    );

    有两种方法可以设置,这里举例第二种。导入一张Bmp位图资源,假设其ID号为IDB_BITMAP1 ,如果我们要让图片铺满(TILE )窗口,即直接使用以下代码:

    SetBackgroundImage(IDB_BITMAP1);

    对于第二个参数,风格有 BACKGR_TILE, BACKGR_TOPLEFT, BACKGR_TOPRIGHT, BACKGR_BOTTOMLEFT, 和 BACKGR_BOTTOMRIGHT。可以设置图片的位置,但是却没有拉伸和居中功能,我们只能自己重载,或者使用别人已经实现的类(http://www.codeproject.com/KB/dialog/bmpdlg01.aspx )

    默认风格如下:

  • 相关阅读:
    Vue 组件封装发布到npm 报错 Uncaught TypeError: Cannot read property 'toLowerCase' of undefined
    SpringBoot thymeleaf模板版本,thymeleaf模板更换版本
    SpringBoot application.properties (application.yml)优先级从高到低
    SpringBoot Cmd运行Jar文件指定active文件的命令如下
    Linux各文件夹的作用
    spring + Mybatis + pageHelper + druid 整合源码分享
    MyEclipse weblogic Deploy Location项目名称不正确解决方案
    Mybatis整合通用Dao,Mybatis整合通用Mapper,MyBatis3.x整合通用 Mapper3.5.x
    An internal error occurred during: "Launching xxx on WebLogic10.x".
    Spring集成Mybatis,spring4.x整合Mybatis3.x
  • 原文地址:https://www.cnblogs.com/lidabo/p/3489637.html
Copyright © 2011-2022 走看看