我现在工程里有多个对话框,对话框上又有好多EDIT控件,我想改变EDIT控件的默认显示风格,比如背景,文本颜色,字体大小等,怎样实现比较简单?
首先我自己写了一个类CMyEdit,基类是CEdit,比如改变颜色在类中响应了=WM_CTLCOLOR消息。这样每一个Edit控件都要利用ClassWizard关联一个CMyEdit对象变量,有好几百个Edit控件,工作量太大。我是想能不能使控件不关联变量就能够改变它的默认显示呢?
请高手帮忙,万分感谢!

解决方案 »

  1.   

    响应CXXXDlg的WM_CTLCOLOR,如果是edit控件,则...
      

  2.   

    switch(nCtlColor) 
    {
      case CTLCOLOR_STATIC: //对所有静态文本控件的设置 
      break;   
      case CTLCOLOR_EDIT: //对所有编辑框的设置
      break;     
      default:;
    }
      

  3.   

    pDC->SelectObject(&font); //?
      

  4.   

    感谢lfchen,刚才试了一下pDC->SelectObject(&font),字体下半部分被遮盖了,显示不正常
      

  5.   

    在CXXDialog::OnCtlCtrl中设置字体(pWnd->SetFont),会引起闪烁。
    还是在外面设置字体吧 GetDlgItem(IDC_EDIT)->SetFont(), 将ID设成连续的,for循环//最好还是继承CEdit
      

  6.   

    1、一个一个设置我做了,首先要把所有edit控件的id罗列成一个数组,然后利用for循环,但是我的edit控件有很多,也是比较麻烦啊!
    2、您说的“最好还是继承CEdit”,我不是还要为每一个edit控件关联变量吗?
    请问lfchen大师还有别的方法吗?
      

  7.   

    if(nCtlColor == CTLCOLOR_EDIT)
    {
    LOGFONT lf;
    if(pWnd->GetFont()->GetLogFont(&lf))
    {
    if(lf.lfHeight != -32 || lf.lfWeight != FW_NORMAL)
    {
    pWnd->SetFont(&font);
    }
    }
    pDC->SelectObject(&font);
    pDC->SetTextColor(RGB(255,0,0));
    pDC->SetBkColor(RGB(0,0,0));
    return CreateSolidBrush(RGB(0,0,0));
    }
    //勉强能用
    //lfheight 正值和负值的转换,参考http://msdn.microsoft.com/en-us/library/ms901140.aspx
    //里面提到lfHeight = -MulDiv(PointSize, GetDeviceCaps(hDC, LOGPIXELSY), 72);
    //不过我没试过。