FAQ整理(不斷添加中)

來源:互聯網
上載者:User

FAQ1: VC7中,如何在非MFC中如何使用CString
-- 包含標頭檔 atlstr.h 即可,需要用到ATL

FAQ2: 檢查某鍵是否被按下
-- if( GetKeyState(VK_LSHIFT) < 0 ) 表示被按下 

FAQ3: 隱藏對話方塊
-- 當你使用有強制回應對話方塊時最開始是無法隱藏視窗的,而只能在對話方塊顯示後再隱藏視窗,所以這會造成螢幕的閃爍。一個解決辦法就是採用無模式的對話方塊,
   無模式的對話方塊在建立後是隱藏的,直到你調用ShowWindow(SW_SHOW)才會顯示
   其實可以用一種方法隱形模式對話方塊:
   ::SetWindowLong(GetSafeHwnd(), GWL_EXSTYLE, WS_EX_TOOLWINDOW);
   ::MoveWindow(AfxGetMainWnd()->m_hWnd,0,0,0,0,FALSE);
   要建立對話方塊時不在工作列顯示按鈕:
   ModifyStyleEx(WS_EX_APPWINDOW, WS_EX_TOOLWINDOW, SWP_DRAWFRAME);

FAQ4: 在源檔案中定位游標到對稱的#if, #endif,使用Ctrl+K.

FAQ5: 手工編譯純資源成dll
-- Rc.exe /v data.rc
   Cvtres.exe /machine:ix86 data.res
   Link /SUBSYSTEM:WINDOWS /DLL /NOENTRY data.res ;編譯成DLL檔案
   這種方式建立的DLL是最小的,比起你用Win 32 Dynamic Libray等產生的更小。

FAQ6: 如何在OLE_COLOR與COLOR之間轉換
-- OLE_COLOR ocBack = GetBackColor();
   // Convert OLE_COLOR to COLORREF
   COLORREF clrBack = OleTranslateColor(ocBack);
   // Convert COLORREF to OLE_COLOR
   OLE_COLOR ocConverted = (OLE_COLOR)clrBack;

FAQ7: Win98不能使用的UNICODE字元處理函數
-- lstrcpyW  - 取代函數:ATL提供的ocscpy
   CharNextW - 取代函數: ATL提供的CharNextO
   Win98和2000都可以使用的:
   lstrlenW
   C運行庫內處理UNICODE的函數(即以wcs開頭的)

FAQ8: WM_NCCALCSIZE訊息
-- 當視窗的位置和大小發生改變時,視窗會收到此訊息。通過處理此訊息,程式可以控制視窗客戶區的大小。
 fCalcValidRects = (BOOL) wParam;  有效地區標誌
 lpncsp = (LPNCCALCSIZE_PARAMS) lParam;  // size calculation data 或
 lpncsp = (LPRECT) lParam;               // new window coordinates
 
 wParam為真表示程式應該指定視窗客戶區有效部分。
 當wParam為真時,lParam是指向一個NCCALCSIZE_PARAMS結構的指標。這個結構包含程式可以計算視窗客戶區大小和位置的
 資訊。當wParam為假時,lParam指向一個RECT結構指標,該結構在處理前包含原本視窗客戶區的地區,在返回前,可以
 修改這個結構的值以表示視窗客戶區的螢幕地區。
 詳細可以參考VCKBASE的:http://www.vckbase.com/document/viewdoc/?id=1302#建立客戶視窗
 註:當視窗大小改變時,在處理該訊息時,調用GetWindowRect不能得到改變後的視窗大小!!
 處理訊息時的RECT是基於螢幕座標

FAQ9: 重載下標操作符 [] 的正確方法
-- 重載下標操作符 [] 是很常見的事情,它儲存類中元素的順序。vector 和 string 就是這樣的類。在重載操作符[]時,一定要記住定義它的兩個版本:非常量版本和常量版本:
   class MyString
   {
       private:
       char * buff;
       int size;
       public:
       //...
       char& operator [] (int index) { return buff[index]; } // 非常量版本
       const char& operator [] (int index) const { return buff[index]; } // 常量版本
     };
   當對象本身是常量時,下標操作符的常量版本被調用。
   void f(const MyString& str)
   {
      char c = str[0]; // 調用const char& operator [] (int index) const
   }

FAQ10: 如何開啟軟鍵盤
-- // m_hWnd 是接受軟鍵盤輸入的視窗控制代碼
     ImmSimulateHotKey(m_hWnd, IME_CHOTKEY_IME_NONIME_TOGGLE);
    
     HIMC hIMC = ImmGetContext(m_hWnd);
     DWORD dwConv, dwSent;
     DWORD dwTemp;
    
     ImmGetConversionStatus(hIMC,&dwConv,&dwSent);
     //dwConv |= IME_CMODE_SOFTKBD;
     if (dwConv & IME_CMODE_SOFTKBD)
 dwConv &= ~IME_CMODE_SOFTKBD;
     else
 dwConv |= IME_CMODE_SOFTKBD;
    
     ImmSetConversionStatus(hIMC,dwConv,dwSent);     
     ImmReleaseContext(m_hWnd,hIMC);

     說明:這種方法開啟的軟鍵盤,必須先開啟某個IME,即軟鍵盤是基於IME的。
     而且無法更多的控制軟鍵盤,比如移動軟鍵盤的位置。

FAQ11: 如何檢查是否串連到網路
-- DWORD dwFlag = 0 ;
   if( !InternetGetConnectedState( &dwFlag , 0 ) )
   {
     // 無法串連到網路
   }
   如果函數成功返回,dwFlag可以獲得當前網路的類型,如LAN或撥號

 

FAQ12: Tree Ctrl 的check box為什麼不能工作?
-- 即使設定了TVS_CHECKBOXES風格,在WM_INITDIALOG裡調用 SetCheck(true) 仍然沒有出現預期的效果,(WTL下用SetCheckState)。原因可能是 WM_INITDIALOG 時,狀態表徵圖沒有被載入,雖然設定了狀態,但沒有顯示出來。解決方案,在調用 SetCheck 前先調用下面兩行代碼:
Tree.ModifyStyle( TVS_CHECKBOXES, 0 ) ;
Tree.ModifyStyle( 0 , TVS_CHECKBOXES ) ;

 

FAQ13: check box風格的Tree Ctrl 如何響應使用者點擊check box的訊息?
-- NM_CLICK , 代碼如下:
   CPoint pt;
   GetCursorPos(&pt); 
   pTree->ScreenToClient(&pt);
   UINT flag;
   HTREEITEM hItem = pTree->HitTest(pt,&flag); 
   if( hItem && flag == TVHT_ONITEMSTATEICON )
   {
        // 滑鼠點擊了 check box
   }

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.