我用VC创建了一个SDK工程,然后用资源编辑器新建了一个对话框,并在其中添加了几个标准控件。但是,我觉得它运行时的样子不好看,想改变它的外观(字体和背景)。请问应该使用什么函数???

解决方案 »

  1.   

    CEdit *pEdit = (CEdit *)GetDlgItem(IDC_EDIT1);
    pEdit->SetFont( &m_pFont );m_pFont必须为事先创建好的类成员CFont *m_pFont
      

  2.   

    我查过了论坛中的其它帖子,说是在WM_CTLCOLOREDIT中处理,于是我在其父窗口过程中加入了以下代码:
    case WM_CTLCOLOREDIT :
     hdcEdit = (HDC) wParam;   // handle to display context 
     hwndEdit = (HWND) lParam; // handle to static control 
     SelectObject (hdcEdit,GetStockObject(SYSTEM_FIXED_FONT)) ;
     SetTextColor (hdcEdit, RGB(0,0,255)) ;
     SetBkColor (hdcEdit, RGB(0,0,255)) ;
     return FALSE ;
    结果,编辑框中文字字体是变了,但是字的颜色与编辑框的背景却没有发生变化!请问如何处理?
      

  3.   

    还需要加入:
    ::SetBkMode(hdcEdit, TRANSPARENT);
      

  4.   

    楼上的兄台,我的程序没有使用MFC方式,而是使用的WIN32 SDK方式。我细看了一下MSDN,发现我的代码应该返回TRUE。修改后果然成功了!但是,我又有了两个新的问题出来了:
    (1)虽然我改变了编辑框中的字体,但是编辑框本身的高度却不能自适应字体的高度。所以,编辑框中的字看不清下半身……
    (2)虽然我通过这段代码改变了编辑框中的字体及背景颜色,但是此时对话框中是只有一个编辑框!如果是多个编辑框,那样我该如何区分它们呢?是取wParam的低字节吗?
      

  5.   

    1)我提供的方法实际上是将Edit的窗口字体设置,Edit自身会自动适应字体的大小,而你用的方法可能只是将他显示的字体改变,而没有适应字体的大小变更Edit控件的尺寸。
    2)你的WM_CTLCOLOREDIT处理中return NULL_BRUSH;(好象HOLLOW_BRUSH也可以)就可以改变色彩了
    3)wParam是dc,而lParam是Edit控件的HWND,因此只要比较::GetDlgCtrlID((HWND)lParam)和你的资源ID就可以确定那个需要改色彩或者改不同的色彩了
      

  6.   

    系统定义:
    #define WHITE_BRUSH         0
    #define LTGRAY_BRUSH        1
    #define NULL_BRUSH          5
    #define HOLLOW_BRUSH        NULL_BRUSH
    很奇怪的是你返回FALSE,则表示使用WHITE_BRUSH,因此正常
    但当你返回TRUE,应该表示使用了LTGRAY_BRUSH,你的控件应该使用LTGRAY_BRUSH作为背景色,不知道为何可以使用你设置的色彩
    郁闷中......
      

  7.   

    ==================================================================================
    (1)虽然我改变了编辑框中的字体,但是编辑框本身的高度却不能自适应字体的高度。所以,编辑框中的字看不清下半身……
    (2)虽然我通过这段代码改变了编辑框中的字体及背景颜色,但是此时对话框中是只有一个编辑框!如果是多个编辑框,那样我该如何区分它们呢?是取wParam的低字节吗?
    ==================================================================================
    这两个问题我还是没有解决呀!!!
      

  8.   

    第一个问题我用MFC程序通过SetFont的方法是成功的,注意CFont必须是全局保存,窗口析构时删除
    第二个问题:
    #define IDC_EDIT1    20001
    #define IDC_EDIT3    20002
    #define IDC_EDIT3    20003if( GetDlgCtrlID(hdcEdit) == IDC_EDIT1 )
    {
        SetTextColor (hdcEdit, RGB(0,255,255)) ;
        SetBkColor (hdcEdit, RGB(255,0,255)) ;    return (HBRUSH)::GetStockObject(NULL_BRUSH);
    }
    else if( GetDlgCtrlID(hdcEdit) == IDC_EDIT1 )
    {
        SetTextColor (hdcEdit, RGB(255,0,255)) ;
        SetBkColor (hdcEdit, RGB(0,255,255)) ;    return (HBRUSH)::GetStockObject(NULL_BRUSH);
    }
    else if( GetDlgCtrlID(hdcEdit) == IDC_EDIT1 )
    {
        SetTextColor (hdcEdit, RGB(0,0,0)) ;
        SetBkColor (hdcEdit, RGB(0,0,255)) ;    return (HBRUSH)::GetStockObject(NULL_BRUSH);
    }return (HBRUSH)::GetStockObject(WHITE_BRUSH);
      

  9.   

    可能是HFont字体类型不是静态的或者全局的
      

  10.   

    find anwser in 《Programming Window》
      

  11.   

    谢谢“非云”兄的大力回复……因为我还没有用到MFC,所以关于这个问题,我还是查看一下《Programming Windows》吧(其实我还没有认真看这本书)。
      

  12.   

    《Programming Windows》这本太长了一点,而且是英文版,我可能要很久才能看得完。有没有大虾可以现在就给我答案的???谢谢!!!
      

  13.   

    改变EDIT背景和字体:
    LRESULT CALLBACK DlgProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
    {
       static HWND hEdit;
       static HFONT hFont;
       static HBRUSH hBrush;
       HDC hdc;
       switch(uMsg)
       {
        case WM_INITDIALOG:
           hEdit=GetDlgItem(hWnd, IDC_EDIT1); // IDC_EDIT1=你的Edit Control的ID
           hBrush=CreateSolidBrush(RGB(0, 0, 255)); //蓝色
           //改变字体
           hFont=CreateFont(,....,"FONTNAME");     
           SendMessage(hEdit, WM_SETFONT, (WPARAM)hFont, MAKELPARAM(TRUE,0));
           return TRUE;
        case WM_CTLCOLOREDIT: 
            //设置前景色
            if(IDC_EDIT1==GetWindowLong((HWND)lParam, GWL_ID))
           {
             hdc = (HDC) wParam;
             SetTextColor(hdc, 0x00ffff); //黄色前景
             return (LONG)hBrush;
            }
            return FALSE;
        case WM_DESTROY:
            DeleteObject(hFont);
            DeleteObject(hBrush);
            return 0;
        default:
          break;
      }
    }