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 )

    默认风格如下:

  • 相关阅读:
    Android游戏开发22:Android动画的实现J2me游戏类库用于Android开发
    android sqlite SQLiteDatabase 操作大全 不看后悔!必收藏!看后精通SQLITE (第三部分,完整代码)
    使用OGR创建dxf格式矢量数据
    mysql 数据库引擎 MyISAM InnoDB 大比拼 区别
    android sqlite SQLiteDatabase 操作大全 不看后悔!必收藏!看后精通SQLITE (第二部分)
    mysql 更改数据库引擎
    android sqlite SQLiteDatabase 操作大全 不看后悔!必收藏!看后精通SQLITE (第一部分)
    android 数字键盘使用
    MySQL Innodb数据库性能实践
    eclipse : Error while performing database login with the driver null
  • 原文地址:https://www.cnblogs.com/lidabo/p/3489637.html
Copyright © 2011-2022 走看看