WTL編程的十個技巧

這篇文章將介紹十個開發WTL應用程序的小技巧。這些技巧內容涉及從怎麼控制和放置應用程序主窗口到怎麼在控件中顯示字符串和整數等系列問題。你可以到http://www.codeproject.com/wtl/Tips/TipsProject.zip下載使用這十個技巧的示例程序。十個技巧包括:
·設置主窗口的大小
·啓動時在屏幕中央顯示主窗口
·設置主窗口的最小/最大尺寸
·動態加載主窗口標題
·將工具欄設置成平面風格
·設置對話框文字和背景的顏色
·交換對話框按鈕位置
·設置平面風格的ListView頭
·在控件中顯示整數
·在控件中顯示資源字符串

主窗口技巧

下面的技巧能夠同時使用在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);
使用條款
  本文章的示例程序是免費的,你可以在任何地方使用。
  THIS SOFTWARE IS DISTRIBUTED AS-IS, WITHOUT WARRANTIES OF ANY KIND.

發佈了20 篇原創文章 · 獲贊 2 · 訪問量 43萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章