在基于对话框的聊天室程序中,如何编写代码随意改变编辑框的字体颜色,像word那样!

解决方案 »

  1.   

    添加响应  ON_WM_CTLCOLOR()
    HBRUSH CxxxDlg::OnCtlColor(CDC *pDC,CWnd* pWnd ,UINT nCtlColor)
    {
    HBRUSH hbr=CDialog::OnCtlColor(pDC,pWnd,nCtlColor);   
        if(CTLCOLOR_EDIT == nCtlColor &&  pWnd->GetDlgCtrlID() == IDC_EDIT1) 
    {
     pDC->SetBkMode(TRANSPARENT);
     pDC->SetTextColor(RGB(255,0,0));
     
     return hbr;
    }
    return hbr;
    }
      

  2.   

    主窗口技巧 下面的技巧能够同时使用在SDI和MDI应用程序中: 1.设置窗口生成时的大小 
     在程序.CPP文件的Run()函数中使用下面的技术可以控制窗口生成时的大小尺寸。用你想要的窗口大小设置rect的值,然后将这个值作为第二个函数传递给CreateEx()函数,如下所示: 
     RECT rc = {0, 0, 380, 265}; 
     if(wndMain.CreateEx(NULL, rc) == NULL) 
    2.将主窗口在桌面中央显示 
     要让主窗口在桌面中央显示,只要在应用程序的.CPP文件的Run()的函数的ShowWindow()命令前增加下面的一行代码: 
     wndMain.CenterWindow(); 
    3.设置最小/最大尺寸 
     如果你想要控制你的主窗口的最大最小尺寸,你要在在头文件mainframe.h的CMainFrame消息映射表中增加下面的消息处理过程。 
     MESSAGE_HANDLER(WM_GETMINMAXINFO, OnGetMinMaxInfo) 
     完全实现功能,还需要在文件中增加处理函数: 
     LRESULT OnGetMinMaxInfo(UINT, WPARAM, LPARAM lParam, BOOL&) 
     { // lParam传递MINMAXINFO结构的指针 
       LPMINMAXINFO lpMMI = (LPMINMAXINFO)lParam;    // 改变size结构中的相应的值为我们想要的窗口大小值 
       lpMMI->ptMinTrackSize.x = 200; // 最小宽度 
       lpMMI->ptMinTrackSize.y = 150; // 最小高度 
       lpMMI->ptMaxTrackSize.x = 600; // 最大宽度 
       lpMMI->ptMaxTrackSize.y = 450; // 最大高度    return 0; } 
    4.动态设置标题 
     是可以通过加载资源中的字符串生成Cstring对象,然后通过这个对象实现动态设置窗口标题。把下面的代码加入到OnCreate()函数中就可以  完成实现这个功能。另外需要在项目中#include “atlmisc.h”,这个文件定义了Cstring类。你能够用LoadString()加载最长255个字符的  字符串。 
     CString str; 
     str.LoadString(IDS_EDITSTRING); 
     SetWindowText(str); 
    5. Flat-style Toolbar 平面风格工具栏 
     使用WTL AppWizard生成程序的时候,如果没有选择rebar的话,生成的工具栏是标准立体按钮。如果你想在没有rebar时工具栏有平面风格,  只要在主框架OnCreate函数的创建工具栏的代码后边增加以下代码就可以了: 
     CToolBarCtrl tool = m_hWndToolBar; 
     tool.ModifyStyle(0, TBSTYLE_FLAT); 
     Dialog Tips 对话框技巧 
     以下的技巧可以使用在对话框或者基于对话框的应用程序中。下边的图显示了我们的示例函数的About对话框,其中使用了两个技巧 
    6. Dialog Text and Background Color 对话框文字和背景的颜色 
     这个技巧提供了简单快速改变对话框的文字或背景颜色的方法。这篇文章示例程序的About对话框里,我们使用SetTextColor设置文字颜色为  白色。北京颜色使用“Stock brush”设置成黑色。第一步是在对话框消息映射表中增加以下的两行代码: 
     MESSAGE_HANDLER(WM_CTLCOLORDLG, OnCtrlColor) 
     MESSAGE_HANDLER(WM_CTLCOLORSTATIC, OnCtrlColor) 
     第二步是在OnCtrlColor函数中改变文字和背景的颜色。将背景模式设置为透明,这样可以正确显示静态控件和group box控件文字。接着,  将文字设置成我们想要的颜色,最后设置背景brush。 
     在项目中增加atlmisc.h头文件,因为AtlGetStockBrush()函数在这个头文件中定义。有几种Stock brusk可以选择WHITE_BRUSH,   LTGRAY_BRUSH, GRAY_BRUSH, DKGRAY_BRUSH, 和BLACK_BRUSH,如果使用其它颜色,你需要生成新的brush, 
     LRESULT OnCtrlColor(UINT, WPARAM, LPARAM, BOOL&) 
     { // 设置背景模式和文字颜色 
       SetBkMode((HDC)wParam, TRANSPARENT); // 透明背景 
       SetTextColor((HDC)wParam, RGB(255, 255, 255)); // 白色文字    return (LRESULT)AtlGetStockBrush(BLACK_BRUSH); } 
    7.动态交换按钮位置 
     下面的代码来自About对话框的OnInitDialog()函数中,用来交换OK和Cancel按钮的位置。其中关键点是将屏幕位置如何转换成相对于Client  的位置。 
     CButton bOk = GetDlgItem(IDOK)); 
     CButton bCancel = GetDlgItem(IDCANCEL));  // 取得按钮位置 
     RECT rcOk, rcCancel; 
     bOk.GetWindowRect(&rcOk); 
     ScreenToClient(&rcOk); 
     bCancel.GetWindowRect(&rcCancel); 
     ScreenToClient(&rcCancel);  // 交换按钮位置 
     bOk.SetWindowPos(NULL, &rcCancel, SWP_NOZORDER  ¦ SWP_NOSIZE); 
     bCancel.SetWindowPos(NULL, &rcOk, SWP_NOZORDER  ¦ SWP_NOSIZE); 
     控件技巧 
     技巧8适用于报表类型的listview控件,技巧9和10适用于接受text的任何控件,如edit控件和richedit控件等。 
    8.平面风格的ListView头 
     将报表型的listview的头控件改成平面外观,只要如下取得头控件对象,并且修改它的类型 
     CHeaderCtrl hdr = MyListView.GetHeader(); 
     hdr.ModifyStyle(HDS_BUTTONS, 0); 
    9.显示整数 
     在项目中增加atlmisc.h文件,这个文件定义了Cstring类。然后使用下面的代码在控件中显示整数值 
     int nValue = 9999; 
     CString sInteger; 
     sInteger.Format("%i", nValue); 
     MyControl.SetWindowText(sInteger); 
    10.显示资源字符串 
     使用atlmisc.h头文件中的辅助函数AtlLoadString加载长度可以超过255个字符的字符串,然后将这个字符串显示到控件中。示例程序中使用  下面的代码实现在edit控将中显示字符串。当在资源字符串表中输入字符串时,要使用\r\n来分行,仅仅\n不能正确分行。 
     TCHAR cArray[1000]; 
     AtlLoadString(IDS_EDITSTRING, cArray, 1000 + 1); 
     MyControl.SetWindowText(cArray); 
     附加技巧 
     下面的技巧可以使用在所有的控件中 
    11.缺省字体 
     当一个控件被放置在对话框上时,控件就采用对话框的缺省字体。然而,当一个控件如视图或者分割面板被使用在窗口中时,将使用SYSTEM_FONT字体,这种字体不是很漂亮。要改变字体的话,只要在工程中增加atlmisc.h文件,然后调用AtlGetStockFont取得truetype字体DEFAULT_GUI_FONT,将控件设置成这种字体: 
     MyControl.SetFont(AtlGetStockFont(DEFAULT_GUI_FONT), TRUE);