DoubleLi

qq: 517712484 wx: ldbgliet

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
  4737 随笔 :: 2 文章 :: 542 评论 :: 1615万 阅读
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

系统环境: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 )

默认风格如下:

posted on   DoubleLi  阅读(1001)  评论(0编辑  收藏  举报
编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
历史上的今天:
2012-12-24 在VC中定制Doxygen注释宏
2012-12-24 Doxygen + Graphviz + Htmlhelp, 成为文档好手
2012-12-24 C++开发常用工具“群英会”
点击右上角即可分享
微信分享提示