对话框与其控件的颜色,字体的设置

来源:互联网 发布:珠宝翡翠淘宝推广 编辑:程序博客网 时间:2024/05/16 09:49
        要改变对话框的一般颜色,可以在C***App的InitInstance函数里加入如下代码:SetDialogBkColor(RGB(0,255,255),RGB(255,0,0));//背景青蓝、文字红色

 

但是这样不能改变对话框中的图形控件的颜色;

 

每个控件在dialog中都是一个窗口,当要绘制控件时,会发出一个WM_CTLCOLOR消息给它的父窗口(对话框本身).消息映射及响应函数如下:

 

ON_WM_CRLCOLOR()  //反映WM_CTLCOLOR消息

 

afx_msg HBRUSH CWnd::OnCrlColor(CDC* pDC,CWnd* pWnd,UINT nCtlColor);

 

//

 

nCtlColor类型:

 

CTLCOLOR_DLG对话框本身,不含有所有的控件

 

CTLCOLOR_STATIC 所有包含static text控件的设置(也包括无效的edit box、combo box的eidt box)

 

CTLCOLOR_EDIT     edit box与combo box的eidt box部分

 

CTLCOLOR_LIST     list box与combo box的edit box部分

 

CTLCOLOR_SCROLLBAR  Scroll bar的空白区

 

 

我们也可以单独改变某一个控件的颜色.OnCtrlColor函数的pWnd成员变量是各控件的窗口指针,以pWnd->GetDlgCtrlID()可以获得调用此函数的控件ID,将它与已知ID比较,就可以改变这个控件的颜色。

 

if(pWnd->GetDlgCtrlID() ==IDC_CONTROL)//为控件的ID

 

{

 

//pDC->SetBkColor(RGB(255, 0, 0)); -----------在这里也用上了这种写法。不行的,

 

}

 

另外一个作法是比较pWnd;例如:如果一个edit box控件的成员变量m_edit1被声明为CEdit类,那么把m_edit1.m_hWnd与pWnd->m_hWnd比较,也可以知道是哪个控件.

 

下面是一个例子:

 

HBRUSH CDIALOGDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)

 

{

 

    HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);

 

    // TODO: Change any attributes of the DC here

 

    if(nCtlColor==CTLCOLOR_EDIT)

 

        pDC->SetTextColor(RGB(0,0,255));    

 

    if(nCtlColor== CTLCOLOR_LISTBOX)

 

    {

 

        HBRUSH m_hbrush;

 

        m_hbrush=CreateSolidBrush(RGB(0,0,0));

 

        pDC->SetBkMode(TRANSPARENT);

 

                //设置字体颜色

 

        pDC->SetTextColor(RGB(255,255,255));

 

        return m_hbrush;

 

    }

 

    CBrush m_cBrush;

 

    m_cBrush.CreateSolidBrush(RGB(0,255,255));

 

    switch(nCtlColor)

 

    {

 

    case CTLCOLOR_DLG:

 

        pDC->SetBkMode(TRANSPARENT);

 

        break;

 

    case CTLCOLOR_STATIC:

 

        pDC->SetTextColor(RGB(255,0,0));

 

        pDC->SetBkColor(RGB(0,255,255));      

 

        break;

 

    }

 

    DeleteObject(m_cBrush);

 

    // TODO: Return a different brush if the default is not desired

 

    return hbr;

 

 

字体设置

   VC的对话框字体设置对所有控件都有效,你不能单独地改变某个静态文本的字体。对于你的问题,需要首先用CreateFont来建立一个字体对象,然后调用控件的SetFont,就可以了。

 

    例子:

 

    1、改静态文体的ID,如:IDC_STATIC1

 

    2、添加一个Edit控件,建立一个关联的控件m_editControl。

 

    3、在OnInitDialog中添加如下代码:

 

     CFont * f;

 

     f = new CFont;

 

     f->CreateFont(16, // nHeight

 

     0, // nWidth

 

     0, // nEscapement

 

     0, // nOrientation

 

     FW_BOLD, // nWeight

 

     TRUE, // bItalic

 

     FALSE, // bUnderline

 

     0, // cStrikeOut

 

     ANSI_CHARSET, // nCharSet

 

     OUT_DEFAULT_PRECIS, // nOutPrecision

 

     CLIP_DEFAULT_PRECIS, // nClipPrecision

 

     DEFAULT_QUALITY, // nQuality

 

     DEFAULT_PITCH | FF_SWISS, // nPitchAndFamily

 

     _T("Arial")); // lpszFac

 

     m_editControl.SetFont(f);

 

     m_editControl.SetWindowText("问专家");

 

     GetDlgItem(IDC_STATIC1)->SetFont(f);

 

     

 

       需要注意的是,这里我们使用的是CFont指针,而不是普通的CFont局部变量。非MFC程序,首先用CreateFont来建立一个字体句柄,然后再用SendMessage发给控件WM_SETFONT消息,将建立的字体句柄赋值过去,就可以了。

 
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 身份证刷不了磁怎么办 身份证不能刷了怎么办 身份证指纹错了怎么办 指纹手机丢了怎么办 异地办理临时身份证怎么办 杭州办理外地身份证怎么办 办理身份证没有户口本怎么办 2018身份证掉了怎么办 双户口注销社保怎么办 常用户口被注销怎么办 刚到厦门怎么办身份证 新疆身份证丢了怎么办 技能证书丢了怎么办 16岁拍身份证怎么办 16岁以下怎么办身份证 办身份证要证明怎么办 15岁怎么办银行卡淘宝 满16岁怎么办银行卡 电脑最小化后不见了怎么办 满16周岁怎么办银行卡 给儿童办身份证怎么办 当兵前身份证号码不符怎么办 身份证后六位密码x怎么办 借了贷款人死了怎么办 贷款实在还不起怎么办 个人贷款还不起怎么办 珠海派出所办事不公平怎么办 改身份证后学籍怎么办? 威海身份证丢了怎么办 车牌轻微变形了怎么办 车牌照丢一个怎么办 小车车牌掉了怎么办 车牌撞变形了怎么办 车牌烂了一块怎么办 机动车牌照丢了怎么办 汽车想换车牌怎么办 机动车前牌照丢失怎么办 汽车后牌照丢失怎么办 机动车扣分超证怎么办 联通香港无服务怎么办 长乐改区 闽侯怎么办