默认生成的对话框太土了;希望能做的漂亮一些,请给个实例,谢谢

解决方案 »

  1.   

    以前总结的:
    改背景色,改背景图片只要把CBrush换为你用Bitmap做的刷子就可以了。内容:改变对话框的背景色
    方法一:调用CWinApp类的成员函数SetDialogBkColor来实现。 
    ---- 其中函数的第一个参数指定了背景颜色,第二个参数指定了文本颜色。下面的例子是将应用程序对话框设置为蓝色背景和红色文本,步骤如下: 
    ---- ① 新建一个基于Dialog的MFC AppWizard应用程序ExampleDlg。 
    ---- ② 在CExampleDlgApp ::InitInstance()中添加如下代码: 
    BOOL CExampleDlgApp: : InitInstance ( )
    {
    …    CExampleDlgDlg dlg;
        m_pMainWnd = &dlg;
    //先于DoModal()调用,将对话框设置为蓝色背景、红色文本
        SetDialogBkColor(RGB(0,0,255),RGB(255,0,0));
        int nResponse = dlg.DoModal();
    …}
    ---- 编译并运行,此时对话框的背景色和文本色已发生了改变。值得注意的是:在调用DoModal()之前必须先调用SetDialogBkColor,且此方法是将改变应用程序中所有的对话框颜色,并不能针对某一个指定的对话框。 
    ---- 方法二:重载OnPaint(),即WM_PAINT消息。有关代码如下(以上例工程为准): 
    void CExampleDlgDlg::OnPaint() 
    {
        if (IsIconic())
    …   else
       {
            CRect rect;
            CPaintDC dc(this);
            GetClientRect(rect);
            dc.FillSolidRect(rect,RGB(0,255,0));  //设置为绿色背景
            CDialog::OnPaint();
       }
    ---- 方法三:重载OnCtlColor (CDC* pDC, CWnd* pWnd, UINT nCtlColor),即WM_CTLCOLOR消息。具体步骤如下(以上例工程为准): 
    ---- ①在CExampleDlgDlg的头文件中,添加一CBrush的成员变量: 
    class CExampleDlgDlg : public CDialog
    {...
    protected:
    CBrush m_brush; 
    ...
    };
    ---- ②在OnInitDialog()函数中添加如下代码: 
    BOOL CExampleDlgDlg::OnInitDialog() 
    {
    ...
    // TODO: Add extra initialization here
    m_brush.CreateSolidBrush(RGB(0, 255, 0)); // 生成一绿色刷子 
    ...

    ---- ③利用ClassWizard重载OnCtlColor(…),即WM_CTLCOLOR消息: 
    HBRUSH CExampleDlgDlg::OnCtlColor
    (CDC* pDC, CWnd* pWnd, UINT nCtlColor) 
    {
    /*
    ** 这里不必编写任何代码!
    **下行代码要注释掉
    ** HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
    */
    return m_brush;   //返加绿色刷子
    }
    ---- 方法四:还是重载OnCtlColor (CDC* pDC, CWnd* pWnd, UINT nCtlColor),即WM_CTLCOLOR消息。具体步骤如下(以上例工程为准): 
    ---- 步骤①、②同上方法三中的步骤①、②。 
    ---- 步骤③利用ClassWizard重载OnCtlColor(…)(即WM_CTLCOLOR消息)时则有些不同: 
    HBRUSH CExampleDlgDlg::OnCtlColor
    (CDC* pDC, CWnd* pWnd, UINT nCtlColor) 
    {
    HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
    //在这加一条是否为对话框的判断语句
    if(nCtlColor ==CTLCOLOR_DLG)
    return m_brush;   //返加绿色刷子
    return hbr;
    }
    ---- 编译并运行即可。
      

  2.   

    如何改变视窗的背景颜色    Windows向窗口发送一个WM_ERASEBKGND消息通知该窗口擦除背景,可以使用
    ClassWizard重载该消息的缺省处理程序来擦除背景(实际是画),并返回TRUE以
    防止Windows擦除窗口。
    //Paint area that needs to be erased.
    BOOL CSampleView : : OnEraseBkgnd (CDC* pDC)     BOOL CSampleView : : OnEraseBkgnd (CDC* pDC)
    {
    // Create a pruple brush.
    CBrush Brush (RGB (128 , 0 , 128) );// Select the brush into the device context .
    CBrush* pOldBrush = pDC—>SelcetObject (&brush);// Get the area that needs to be erased .
    CRect reClip ;
    pDC—>GetCilpBox (&rcClip);//Paint the area.
    pDC—> PatBlt (rcClip.left , rcClip.top ,
            rcClip.Width ( ) , rcClip.Height ( ) , PATCOPY );//Unselect brush out of device context .
    pDC—>SelectObject (pOldBrush );// Return nonzero to half fruther processing .
    return TRUE;
    }
      

  3.   

    用位图做背景:
    CPaintDC dc;
    CBitmap Bitmap;
    Bitmap.LoadBitmap(IDB_BITMAP1);
    BITMAP bm;
    Bitmap.GetObject(sizeof(BITMAP),&bm);
    CDC MemDC;
    MemDC.CreateComatibleDC(NULL);
    MemDC.SelectObject(&Bitmap);
    dc->BitBlt(10,10,bm.bmWidth, bm,bmHeight,&MemDC,0,0,SRCCOPY);
      

  4.   

    最简单的办法,重载COLOUR函数
      

  5.   

    如何给VC对话框加位图背景http://www.tiantiansoft.com/Article_Show.asp?ArticleID=96
      

  6.   

    用Skin++,MagicSkin换个皮肤就不土了^_^