1. 程式人生 > >C++/MFC程式設計技巧

C++/MFC程式設計技巧

1 toolbar預設點陣圖左上角那個點的顏色是透明色,不喜歡的話可以自己改。
  2 VC++中 WM_QUERYENDSESSION WM_ENDSESSION 為系統關機訊息。
  3 Java學習書推薦:《java程式設計思想》
  4 在VC下執行DOS命令
   a. system(“md c:\12”);
   b. WinExec(“Cmd.exe /C md c:\12”, SW_HIDE);
   c. ShellExecute
   ShellExecute(NULL,“open”,“d:\WINDOWS\system32\cmd.exe”,"/c md d:\zzz","",SW_SHOW);
   d. CreateProcess
   下面這個示例的函式可以把給定的DOS命令執行一遍,並把DOS下的輸出內容記錄在buffer中。同時示範了匿名管道重定向輸出的用法:
   -------------------------------------------------------------------------------------
   BOOL CDOSDlg::ExecDosCmd()
   {
   #define EXECDOSCMD “dir c:” //可以換成你的命令
  
   SECURITY_ATTRIBUTES sa;
   HANDLE hRead,hWrite;
  
   sa.nLength = sizeof(SECURITY_ATTRIBUTES);
   sa.lpSecurityDescriptor = NULL;
   sa.bInheritHandle = TRUE;
   if (!CreatePipe(&hRead,&hWrite,&sa,0))
   {
   return FALSE;
   }
   char command[1024]; //長達1K的命令列,夠用了吧
   strcpy(command,“Cmd.exe /C “);
   strcat(command,EXECDOSCMD);
   STARTUPINFO si;
   PROCESS_INFORMATION pi;
   si.cb = sizeof(STARTUPINFO);
   GetStartupInfo(&si);
   si.hStdError = hWrite; //把建立程序的標準錯誤輸出重定向到管道輸入
   si.hStdOutput = hWrite; //把建立程序的標準輸出重定向到管道輸入
   si.wShowWindow = SW_HIDE;
   si.dwFlags = STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES;
   //關鍵步驟,CreateProcess函式引數意義請查閱MSDN
   if (!CreateProcess(NULL, command,NULL,NULL,TRUE,NULL,NULL,NULL,&si,π))
   {
   CloseHandle(hWrite);
   CloseHandle(hRead);
   return FALSE;
   }
   CloseHandle(hWrite);
  
   char buffer[4096] = {0}; //用4K的空間來儲存輸出的內容,只要不是顯示檔案內容,一般情況下是夠用了。
   DWORD bytesRead;
   while (true)
   {
   if (ReadFile(hRead,buffer,4095,&bytesRead,NULL) == NULL)
   break;
   //buffer中就是執行的結果,可以儲存到文字,也可以直接輸出
   AfxMessageBox(buffer); //這裡是彈出對話方塊顯示
   }
   CloseHandle(hRead);
   return TRUE;
   }
   -------------------------------------------------------------------------------------
  5 刪除目錄,包含刪除子資料夾以及其中的內容
   -------------------------------------------------
   BOOL DeleteDirectory(char DirName)//如刪除 DeleteDirectory(“c:\aaa”)
   {
   CFileFind tempFind;
   char tempFileFind[MAX_PATH];
   sprintf(tempFileFind,"%s\

.",DirName);
   BOOL IsFinded=(BOOL)tempFind.FindFile(tempFileFind);
   while(IsFinded)
   {
   IsFinded=(BOOL)tempFind.FindNextFile();
   if(!tempFind.IsDots())
   {
   char foundFileName[MAX_PATH];
   strcpy(foundFileName,tempFind.GetFileName().GetBuffer(MAX_PATH));
   if(tempFind.IsDirectory())
   {
   char tempDir[MAX_PATH];
   sprintf(tempDir,"%s\%s",DirName,foundFileName);
   DeleteDirectory(tempDir);
   }
   else
   {
   char tempFileName[MAX_PATH];
   sprintf(tempFileName,"%s\%s",DirName,foundFileName);
   DeleteFile(tempFileName);
   }
   }
   }
   tempFind.Close();
   if(!RemoveDirectory(DirName))
   {
   MessageBox(0,“刪除目錄失敗!”,“警告資訊”,MB_OK);//比如沒有找到資料夾,刪除失敗,可把此句刪除
   return FALSE;
   }
   return TRUE;
   }
   -------------------------------------------------------------
  6 讓程式暫停:system(“PAUSE”);
  7 在PreTranslateMessage中捕捉鍵盤事件
  
   if (pMsg->messageWM_KEYDOWN && pMsg->wParam
VK_RETURN)return TRUE; //注意return的值
  8 更改按鍵訊息(下面的程式碼可把回車鍵訊息改為TAB鍵訊息)
   -------------------------------------------------------
      BOOL CT3Dlg::PreTranslateMessage(MSG
pMsg)
      {
  
      if(pMsg->message == WM_KEYDOWN && VK_RETURN == pMsg->wParam)
       {
      pMsg->wParam = VK_TAB;
       }
       return CDialog::PreTranslateMessage(pMsg);
      }
   ------------------------------------------
  9 MoveWindow: 一個可以移動、改變視窗位置和大小的函式
  10 16進位制轉化成10進位制小數的問題
       用一個讀二進位制檔案的軟體讀檔案
       二進位制檔案中的一段 8F C2 F5 3C 最後變成了 0.03
       請問這是怎麼轉換過來的??
     方法一:浮點技術法,如
      DWORD dw=0x3CF5C28F;
      float d=(float
)&dw;//0.03;
       方法二:浮點的儲存方式和整數完全兩樣,你想了解的話可以去
           http://www.zahui.com/html/1/3630.htm
          看一看,不過通常我們都不必瞭解它就可以完成轉換。
          char a[4] = {0x8F, 0xC2, 0xF5, 0x3C};
          float f;
          memcpy(&f,a,sizeof(float));
   TRACE(”%d”,0x3CF5C28F);
  11 EDIT控制元件的 EM_SETSEL,EM_REPLACESEL訊息
   12 在其它程序中監視鍵盤訊息:用SetWindowsHookEx(WH_KEYBOARD_LL,…);
  13 在桌面上任意位置寫字
   --------------------------------------------------
   HDC deskdc = ::GetDC(0);
   CString stext = “我的桌面”;
   ::TextOut(deskdc,100,200,stext,stext.GetLength());
   ::ReleaseDC(0,deskdc);
   ------------------------------------------------------
  14 HWND thread_hwnd=Findwindow(NULL,“你要監控的程序窗體(用SPY++看)”),
   if (thread_hwnd==NULL) 。。。。。。。。。。
   else DWORD thread_id=GetWindowThreadProcessId(thread_hwnd,NULL)
  15 waveOutGetVolume()可以得到波形音量大小
  16 隱藏桌面圖示並禁用右鍵功能選單:
   ------------------------------------
   HWND Hwd = ::FindWindow(“Progman”, NULL);
   if (bShowed)
   ::ShowWindow(Hwd, SW_HIDE);
   else
   ::ShowWindow(Hwd, SW_SHOW);
   bShowed = !bShowed;
   ---------------------------------------
  17 獲得程式當前路徑:
   ---------------------------------------------
   char ch[256];
   GetModuleFileName(NULL,ch,255);
   for(int i=strlen(ch);i && ch[i]!=’\’;i–);
   ch[i]=0;
   AfxMessageBox(ch);
   ----------------------------------------------
  18 KeyboardProc的lParam中包含著許多按鍵資訊,其中第31位(從0開始)為0表示是按下按鍵,為1表示鬆開按鍵。
   (lParam & 0x80000000)進行二進位制’與’計算,效果是取第31位的值。
   (lParam & 0x40000000)是取第30位,30位表示按鍵的上一個狀態,為1表示之前鍵已經是按下的,0表示鬆開。
    lParam
    [in] Specifies the repeat count, scan code, extended-key flag, context code, previous key-state flag, and transition-state flag. For more information about the lParam parameter, see Keystroke Message Flags. This parameter can be one or more of the following values.
    0-15
    Specifies the repeat count. The value is the number of times the keystroke is repeated as a result of the user’s holding down the key.
    16-23
    Specifies the scan code. The value depends on the OEM.
    24
    Specifies whether the key is an extended key, such as a function key or a key on the numeric keypad. The value is 1 if the key is an extended key; otherwise, it is 0.
    25-28
    Reserved.
    29
    Specifies the context code. The value is 1 if the ALT key is down; otherwise, it is 0.
    30
    Specifies the previous key state. The value is 1 if the key is down before the message is sent; it is 0 if the key is up.
    31
    Specifies the transition state. The value is 0 if the key is being pressed and 1 if it is being released.
  19 複製檔案應該用到CopyFile或是CopyFileEx這兩個API
  20 移動視窗的位置或改變大小:MoveWindow/SetWindowPos
  21 我的程式是當前執行的程式時,可以用setcursor()來設定游標的圖示。
   而且可以用setcapture()是滑鼠移動到我得程式視窗之外時也是我設定的圖示
   但是如果我得程式不是當前的執行程式的,滑鼠就會變會預設的。
   怎樣能夠,使得不變回預設的,還是用我設定的游標?
   SetSystemCursor
  22 SendMessage函式的幾個用法:
   控制按鈕按下的,是這麼用的
   SendMessage(n1, WM_COMMAND, MAKELPARAM(ID,BN_CLICKED),(LPARAM )n2); (n1,n2是控制代碼)
   而得到文字內容,是這樣用的,
   SendMessage(hWnd,WM_GETTEXT,10,(LPARAM)buf),
  23 處理一個單行EDIT的WM_CTLCOLOR要同時響應nCtlColor = CTLCOLOR_EDIT和CTLCOLOR_MSGBOX的兩個情況,參考http://msdn.microsoft.com/library /default.asp?url=/library/en-us/vclib/html/_mfc_cwnd.3a3a.onctlcolor.asp
  24 裝置發生改變處理函式可在CWnd::OnDeviceChange中,捕獲WMDEVICECHANGE事件不能區分諸如裝置插入、拔下訊息。
  25 把字元"abc\n123"存入文字檔案中時,檔案內容沒看見換行,其實用word開啟該檔案是有換行的。另外用"abc\r\n123"代替也可看見換行。
  26 ::SetFocus(::GetDesktopWindow()); 或::BringWindowToTop(::GetDesktopWindow());
    ::GetDesktopWindow()這裡可獲得桌面視窗的控制代碼
  27 陣列初始化:
   int a[24][34]; //宣告陣列
   memset(a,-1,2434); //全部元素初始化成-1,但初始化成除0和-1以外的數值是不行的
  28 SHGetFileInfo函式可獲得檔案資訊。
   29 建立一個控制元件:
   HWND hEdit=CreateWindow(“EDIT”,NULL,WS_CHILD|WS_VISIBLE |ES_LEFT,50,20,50,20,hwnd,NULL,hInst,NULL); //hwnd引數為父視窗控制代碼
  30 VC中對聲音檔案的操作:http://www.pujiwang.com/twice /Article_Print.asp?ArticleID=550
  31 呼叫其它程式又要隱藏視窗:用CreateProcess函式呼叫,再拿到視窗控制代碼,然後::ShowWindow(hWnd,SW_HIDE);
  32 讀取文字檔案中的一行:
     用CFile類的派生類:CStdioFile的方法:CStdioFile::ReadString
  33 刪除非空資料夾:
   ------------------------------------------------
   SHFILEOPSTRUCT shfileop;
   shfileop.hwnd = NULL;
   shfileop.wFunc = FO_DELETE ;
   shfileop.fFlags = FOF_SILENT|FOF_NOCONFIRMATION;
   shfileop.pFrom = “c:\temp”; //要刪除的資料夾
   shfileop.pTo = “”;
   shfileop.lpszProgressTitle = “”;
   shfileop.fAnyOperationsAborted = TRUE;
   int nOK = SHFileOperation(&shfileop);
   -------------------------------------------------
  34 函式前面加上::是什麼意思?
     叫域運算子…在MFC中表示呼叫API…或其它全域性函式…為了區分是mfc函式還是api
     詳見:http://search.csdn.net/Expert/topic/1183 /1183492.xml?temp=.9471247
  35 CImageList的用法:http://www.study888.com/computer/pro/vc/desktop/200506 /39027.html
  36 有關控制元件的一些常見問答:
   http://fxstudio.nease.net/article/ocx/ <==============很不錯的地方哦
  37 在多文件客戶區中增加點陣圖底圖演示程式:
   http://www.study888.com/computer/pro/vc/desktop/200506/39028.html
   我的對應工程:AddBackgroundBitmap
  38 用VC++6.0實現PC機與微控制器之間序列通訊
   http://www.zahui.com/html/1/1710.htm
  39 日期到字串:
   --------------------------------------------------
   SYSTEMTIME sys;
   GetSystemTime(&sys);
   char str[100];
   sprintf(str,"%d%d%d_%d%d%d",sys.wYear,sys.wMonth,sys.wDay,sys.wHour+8,sys.wMinute,sys.wSecond);
   //這裡的小時數注意它的0:00點是早上8:00,所以要加上8,因為這是格林威治時間,換成我國時區要加8
   --------------------------------------------------
   CString m_strTemp;
   SYSTEMTIME systemtime;
   GetLocalTime(&systemtime); //這個函式可獲得毫秒級的當前時間
   m_strTemp.Format("%d年%d月%d日%d:%d:%d:%d 星期%d",systemtime.wYear,systemtime.wMonth,systemtime.wDay,systemtime.wHour,systemtime.wMinute,systemtime.wSecond,systemtime.wMilliseconds,systemtime.wDayOfWeek);
   --------------------------------------------------
  40 工作列上的圖示閃爍:
     The FlashWindow function flashes the specified window once, whereas the FlashWindowEx function flashes a specified number of times.
  
   BOOL FlashWindow(
   HWND hWnd, // handle to window to flash
   BOOL bInvert // flash status
   );//閃爍一次
   FlashWindowEx()//閃爍多次
  41 十六進位制字元轉浮點數:http://community.csdn.net/Expert/topic/4379 /4379713.xml?temp=.7092096
     long lValue = 0xB28A43;
   float fValue;
   memcpy(&fValue,&lValue,sizeof(float));
  42 在一個由漢字組成的字串裡,由於一個漢字由兩個位元組組成,怎樣判斷其中一個位元組是漢字的第一個位元組,還是第二個位元組,使用IsDBCSLeadByte 函式能夠判斷一個字元是否是雙字的第一個位元組,試試看:)
   _ismbslead
   _ismbstrail
   43 如何實現對話方塊面板上的控制元件隨著對話方塊大小變化自動調整
     在OnSize中依其比例用MoveWindow同等縮放.http://www.codeproject.com/dialog/dlgresizearticle.asp
  44 向 CListCtrl中插入資料後,它總是先縱向再橫向顯示,我希望他先橫向再縱向
   在CListCtrl的ReDraw()中處理(見http://community.csdn.net/Expert/topic/4383 /4383963.xml?temp=.3442041)
   如:
   m_list.ReDraw(FALSE);
   m_list.ReDraw(TRUE);
  45 給你的程式加上splash:http://www.vckbase.com/document/finddoc.asp?keyword=splash
   如何新增閃屏:Project->Add to Project->Components and Controls->Gallery\Visual C++ Components->Splash screen
  46 實現象快速啟動欄的"顯示/隱藏桌面"一樣的功能:http://fxstudio.nease.net/article/form/55.txt
  47 如何設定listview某行的顏色:
     CSDN上的貼子:http://community.csdn.net/Expert /topic/4386/4386904.xml?temp=2.422512E-03
     Codeguru上相關連結:http://www.codeguru.com/Cpp/controls/listview/backgroundcolorandimage/article.php/c1093/
  48 如何得到視窗標題欄尺寸:http://community.csdn.net/Expert /topic/4387/4387830.xml?temp=.6934168
   GetSystemMetrics(SM_CYCAPTION或者SM_CYSMCAPTION);
  
   SM_CYCAPTION Height of a caption area, in pixels.
   SM_CYSMCAPTION Height of a small caption, in pixels.
   --------------------------------------------------------
   GetWindowRect(&rect);
   rect.bottom = rect.top + GetSystemMetrics(SM_CYSIZE) + 3;
   --------------------------------------------------------
  49 如何將16進位制的byte轉成CString:
   ---------------------------------
   BYTE p[3];
   p[0]=0x01;
   p[1]=0x02;
   p[2]=0x12;
   CString str;
   str.Format("%02x%02x%02x", p[0], p[1], p[2]);
   -------------------------------------
  50 怎樣查詢到正處在滑鼠下面的視窗(具體到子視窗和選單),無論是這個視窗是否具有焦點:
   -----------------------------------------------------------
   POINT pt;
   CWnd* hWnd; // Find out which window owns the cursor
   GetCursorPos(&pt);
   hWnd=CWnd::WindowFromPoint(pt);
   if(hWnd
this)
   {
   //滑鼠在窗體中空白處,即不在任何控制元件或子視窗當中
   }
  
  51 得到CListCtrl控制元件點選事件時點選的位置:
   -----------------------------------------------
   void CTest6Dlg::OnClickList1(NMHDR* pNMHDR, LRESULT* pResult)
   {NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
   if(pNMListView->iItem != -1)
   {
   CString strtemp;
   strtemp.Format(“單擊的是第%d行第%d列”,
   pNMListView->iItem, pNMListView->iSubItem);
   AfxMessageBox(strtemp);
   }
   pResult = 0;
   }
   ------------------------------------------------
  52 如何在clistctrl的單元格里新增圖片?http://community.csdn.net/Expert/topic/4388 /4388748.xml?temp=.2233393
  
  53 自己處理按鍵響應函式:
   -------------------------------------------------
   BOOL CTest6Dlg::PreTranslateMessage(MSG
pMsg)
   {
   if( pMsg->message == WM_KEYDOWN )
   {
   if(pMsg->hwnd == GetDlgItem(IDC_EDIT1)->m_hWnd) //判斷當前控制元件是不是編輯框
   {
   switch( pMsg->wParam )
   {
   case VK_RETURN: //如果是回車鍵的話
   Onbutton1(); //就呼叫Button1的響應函式
   }
   }
   return CDialog::PreTranslateMessage(pMsg);
   }
   ---------------------------------------------------
  54 如何在VC中操縱word:http://www.vckbase.com/document/viewdoc/?id=1174
  55 兩個畫素(用RGB表示)如何確定亮度等級:
   加權算出灰度值:R0.21+Green0.70+Blue0.09,或:
   ((紅色值 X 299) + (綠色值 X 587) + (藍色值 X 114)) / 1000
  56 對已畫在CDC上的圖片進行處理,實現任意比例的透明度。
   MSDN:http://msdn.microsoft.com/msdnmag/issues/05/12/CatWork/
  實現方法是:
  1、用GetCurrentBitmap得到DC上的CBitmap指標;
  2、用GetBitmapBits得到CBitmap上的影象資料流;
  3、對影象資料流中每個位元組進行轉換,轉換的公式為
   pBits[i] += (255 - pBits[i]) * nTransparent / 100;//nTransparent為透明度的百分率
  
  57 MFC很多API函式的原始碼都在:VC安裝目錄\VC98\MFC\SCR\WINCORE.cpp檔案中。
  58 自己寫了個函式,用來獲得ANSI字串中真實字元的個數,如“I服了U”的長度返回4:
   --------------------------------------------------
   int GetCount(CString str)
   {
   int total=0;
   for(int i=0;i
   {
   if (127<(unsigned int)str.GetAt(i))
   {
   total++;
   i++;
   }
   else
   total++;
   }
   return total;
   }
   ----------------------------------------------------
  59 訊息傳遞中pMSG中一些引數的意義:
   hwnd-------接收訊息的視窗控制代碼;
   message----傳送的訊息號;
   wParam-----訊息引數,具體意義同傳送的訊息有關;
   lParam-----同上;
   time-------傳送訊息時的時間,數值大小為自系統啟動以來經歷的時間,單位是毫秒;
   pt---------傳送訊息時滑鼠在螢幕上的絕對座標,單位是畫素。
  60 重新整理螢幕區域性:
  重新整理控制元件區域:
  控制元件 ID:IDC_STATIC_STATIC
   ------------------------------------
   CRect static_rect;
   CWnd pwnd = GetDlgItem(IDC_STATIC_STATIC);
   if (pwnd == NULL)
   {
   return;
   }
   pwnd->GetWindowRect(&static_rect);
   ScreenToClient(&static_rect);
   InvalidateRect(&static_rect); //注意這個函式,會呼叫OnEraseBkgnd
   --------------------------------------
  61 VC實現錄音,放音,儲存,開啟功能: http://www.pconline.com.cn/pcedu/empolder/gj/vc/0412/509819.html
  62 獲得工作列高度:
   ----------------------------------
   HWND hWnd = FindWindow(“Shell_TrayWnd”, NULL);
   RECT rc;
   ::GetWindowRect(hWnd, &rc);
   int iHeight = rc.bottom -rc.top;
   -----------------------------------
  63 vc控制word、excel的問題:http://msdn.microsoft.com/library/default.asp?url= /library/en-us/dnoxpta/html/vsofficedev.asp
   下面還有範例兩個:
           http://www.vckbase.com/code/downcode.asp?id=2415
            http://www.vckbase.com/code/downcode.asp?id=2397
  
  64 給ListBox控制元件加上水平滾動條:m_list.SetHorizontalExtent(100); //m_list為和listbox控制元件繫結的CListBox變數
  65 下拉式的工具條按鈕:http://community.csdn.net/Expert/topic/4413 /4413094.xml?temp=.2334864
  66 如何讓MFC基於Dialog的程式在工作列中顯示:http://community.csdn.net/Expert/topic/4413/4413492.xml?temp=.3407404
  67 製作一個沒有標題欄.選單欄和工具欄的視窗,就象遊戲介面一樣:
      http://community.csdn.net/Expert/topic/4396/4396239.xml?temp=.568783
  68 為何組合框Droplist風格時響應鍵盤PreTranslateMessage函式,而dropdown風格時不響應:
      http://community.csdn.net/Expert/topic/4412/4412791.xml?temp=.8741419
  69 直接用特殊字元的編碼:s=WCHAR(0x00e6); //還沒試過
  70 在標題欄上畫圖:http://community.csdn.net/Expert/topic/4416/4416434.xml?temp=.8910944
  71 如何精確延時:http://www.vckbase.com/document/viewdoc/?id=1301
  72 怎樣給 TreeView控制元件中的結點重新命名:http://community.csdn.net/Expert/topic/4409 /4409069.xml?temp=.1730463
  73 從記憶體中載入並啟動一個exe :http://community.csdn.net/Expert/topic/4418/4418306.xml?temp=.7619135
  74 修改一個EXE的資源:http://community.csdn.net/Expert/topic/4420 /4420755.xml?temp=.5104029
  75 使用並顯示64bit數值的方法:
      __int64 ld = 2000000000
4500000000; //64bit數的範圍:-9223372036854775808~+9223372036854775807
   printf("%I64d\n",ld);
  76 在程式中使用console視窗顯示:http://www.codeguru.com /Cpp/W-D/console/
   在裡面找一下:Redirection
  77 用程式碼畫滑鼠圖案並限定滑鼠移動區域(用 ClipCursor函式):
       http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/winui/windowsuserinterface/resources/cursors/usingcursors.asp
  78 改變編輯框字型的大小:http://community.csdn.net/Expert/topic/4389 /4389148.xml?temp=.2317163
    先在對話方塊類的內部宣告一個CFont物件,如:CFont myfont;
   ---------------------------------
   myfont.CreatePointFont(500, “Arial”);
   GetDlgItem(IDC_EDIT1)->SetFont(&myfont);
   ---------------------------------
  79 bmp圖片怎麼轉換為jpg:
    用cximage
    www.codeproject.com上有
  80 字串轉成UTF-8格式參考CSDN上的 FAQ:http://community.csdn.net/Expert/FAQ/FAQ_Index.asp?id=191432
  81  將16進位制字串轉換成10進位制整數:
     char a[3]=“ab”;
     DWORD val = strtoul(a, NULL, 16);
  82 快速從數字的字串中提取出特定長度的數字:
   -------------------------------------------------------
   int a[4];
   sscanf(“2004115819185”,"%07d%02d%02d%02d",&a[0],&a[1],&a[2],&a[3]); //按指定長度分隔
   --------------------------------------------------------
    或:
   -------------------------------------------------------
   CString s=“aaa,bbb,ccc,ddd”;
   char a1[4],a2[4],a3[4],a4[4]; //這裡要注意多留點空間以存放各子串的長度
   sscanf(s,"%[,],%[,],%[,],%[,]",a1,a2,a3,a4); //按指定字元(這裡是逗號)分隔
   AfxMessageBox(a4);//顯示ddd
   -------------------------------------------------------
  83 配置檔案的配置項可不可以刪除:http://community.csdn.net/Expert/topic/4402 /4402346.xml?temp=.4008448
  84 如何改變CListCtrl包括Scrollbars和Column Headers的顏色和風格:http://www.codeguru.com/Cpp/controls/listview /backgroundcolorandimage/print.php/c4185/
  85 根據ComboBox加入的字串的長度自動調整ComboBox控制元件的寬度:
    //這裡假設為ComboBox加入兩個字串
    CString str1=“中華人民共和國中華人民共和國”,str2=“1234567890123中國89012345678”;
     m_combo.AddString(str1); //m_combo為繫結在組合框控制元件的變數
     m_combo.AddString(str2);
    int len=str1.GetLength()6.2; //根據加入的字串長度(以位元組為單位)和組合框使用的預設字型的大小計算組合框實際需要的寬度,計算中間用到了整數->浮點數->整數的兩次數值型別隱式轉換,也可以用winAPI函式GetTextExtentPoint32()或GetTextExtent計算
     m_combo.SetDroppedWidth(len);
  86 彈出U盤:http://community.csdn.net /Expert/topic/4432/4432968.xml?temp=.8724634
  87 往另一個程式的編輯框中傳送文字:控制代碼 ->SendMessage(WM_SETTEXT,strlen(buf),(LPARAM)buf); //buf為你要加入的char

  88 如何在RichEdit中加超連結:http://community.csdn.net /Expert/topic/4434/4434686.xml?temp=9.524173E-02
  89 VC控制元件的用法:http://www.vckbase.com/document/indexold.html
  90 學習資源:http://code.ddvip.net/list/sort000081_1.html
  91 在初始時候定位到LIST的指定行 (如第100行)開始顯示:EnsureVisible(100) //未驗證
  92 如何在app中 SetTimer():http://community.csdn.net/Expert/topic/4437 /4437002.xml?temp=6.014651E-02
                http://search.csdn.net/Expert/topic/1422/1422546.xml?temp=.5501825
   93 一個基於SDK的軟鍵盤的範例,可以學習如何傳送虛擬按鍵或滑鼠訊息:http://www.codeproject.com/cpp/togglekeys.asp
  94 MDI文件中的字型、及其顏色怎麼設定:http://community.csdn.net /Expert/topic/4396/4396003.xml?temp=.7866938
  95 自己捕捉特定的組合鍵:http://community.csdn.net/Expert/topic/4439/4439270.xml?temp=.7411157
   http://community.csdn.net/Expert/topic/4484/4484120.xml?temp=.3993799
   --------------------------------------------------------------
   BOOL CMMDlg::PreTranslateMessage(MSG
pMsg)
   {
   // TODO: Add your specialized code here and/or call the base class
   BOOL b = GetAsyncKeyState(VK_CONTROL) >> ((sizeof(short) * 8)-1);
   if(b)
   {
   b = GetAsyncKeyState(VK_MENU) >> ((sizeof(short) * 8)-1);
   if(b)
   {
   b = GetAsyncKeyState(65) >> ((sizeof(short) * 8)-1); //這裡不分大小寫
   if(b)
   {
   AfxMessageBox(“你按下了Ctrl+Alt+A組合鍵。”) ;
   }
   }
   }
  
   return CDialog::PreTranslateMessage(pMsg);
   }
   -------------------------------------------------------------
   另外,GetAsyncKeyState和::GetKeyState這兩個函式也可以幫你檢測Shift、Ctrl和Alt這些鍵的狀態。
   96 快速從得到的全路徑檔名中分離出碟符、路徑名、檔名和字尾名:
   ------------------------------------------------
   char path_buffer[_MAX_PATH];
   char drive[_MAX_DRIVE];
   char dir[_MAX_DIR];
   char fname[_MAX_FNAME];
   char ext[_MAX_EXT];
   GetModuleFileName(0,path_buffer,_MAX_PATH);
   splitpath( path_buffer, drive, dir,fname , ext); //用這個函式轉換
   ------------------------------------------------
  97 如何debug除零錯誤:http://community.csdn.net/Expert/topic/4440/4440273.xml?temp=.2427484
  98 修改VS.net“工具”欄中選單的預設圖示:http://www.codeproject.com/dotnet/vsnet_addin_icon_change.asp
  99 在視窗的標題欄和選單欄上象realplayer那樣新增自己的 logo:http://www.codeproject.com/menu/menuicon.asp
  100 個性化的點陣圖選單,自己從 CMenu派生子類實現:http://www.codeguru.com/Cpp/controls/menu/bitmappedmenus /article.php/c165
   http://www.codeguru.com/Cpp/controls/menu/bitmappedmenus/article.php/c163
  101 怎樣取得程式自己佔用的記憶體和CPU佔用率:GetProcessMemoryInfo和GetPerformanceInfo
   102 如何讓你的程式執行在release模式下:build->set active configuration
  103 監視資料夾是否被更新:FindFirstChangeNotification、FindNextChangeNotification、 FindCloseChangeNotification這三個函式
   範例見:http://msdn.microsoft.com/library/default.asp?url=/library/en-us/fileio/fs/obtaining_directory_change_notifications.asp
  105 動態選單:http://community.csdn.net/Expert/topic/4441/4441893.xml?temp=.2887384
   http://community.csdn.net/Expert/topic/4506/4506791.xml?temp=.2409326
  106 如何獲取客戶區的中心座標:http://community.csdn.net/Expert/topic/4449 /4449444.xml?temp=8.642215E-02
  107 強行操作記憶體虛擬地址中某個指定地方的內容:
   ----------------------------------------------
      int a=(int)0x00440000; //這裡以訪問0x00440000地址為例
   cout<<a<
   ----------------------------------------------
  108 如何響應條碼機:http://community.csdn.net/Expert/topic/4453/4453026.xml?temp=.1966516
       條碼掃描器主要有三種介面: 1.RS232 2.共用接盤介面 3.USB外設. 對於RS232,需要程式設計來監視和讀取條碼; 對於共用接盤介面,條碼資訊被轉換成相應的鍵盤訊息,具有輸入焦點的應用程式會收到鍵盤輸入訊息,我們以前的做法是做一個全域性keyboard Hook或應用程式級別上 keyboard hook, 監視鍵盤訊息,當有連續的鍵盤訊息(在很短的時間內),並且這些鍵盤字元能構成完成的條碼資訊,就產生一條自定義訊息,通知視窗(向監視程式註冊的視窗) 條碼資訊到達,條碼機只是相當於一個鍵盤,所以你也可以在介面上放一個edit框,條碼機讀出條碼後還會在字串後面加一個回車(這個一般是可設定的,可加可不加),如果條碼機自動加回車,則你重寫OnOK函式,將edit框的內容取出放入list即可。
  
  當然也可不放edit框,而直接接收鍵盤字元(比如重寫OnChar函式等,方法很多),但要考慮到這種情況:條碼讀不出來的情況,此時應該用手動輸入條碼,所以還是放一個 edit框為好。
  
  109 檢查指定資料夾是否存在:PathIsDirectory()
   方法一:
   檢查給定路徑是否根目錄:BOOL PathIsRoot(LPCTSTR pPath);
   說明:Returns TRUE for paths such as “\”, “ X:\”, “\ server\ share”, or “\ server\”。Paths such as “…\path2” will return FALSE.
       用這兩個函式要先:#include ;
   再把這個檔案加入工程:shlwapi.lib
   方法二:
   GetFileAttributes檢查檔案是否存在,並且檢查是否資料夾屬性FILE_ATTRIBUTE_DIRECTORY
   ----------------------------------------------------------
   DWORD = GetFileAttributes(_T(“f:\win98”));
   if(dwAttr != 0xFFFFFFFF && (dwAttr & FILE_ATTRIBUTE_DIRECTORY))
   cout<<“exist”<
   else
   cout<<“NOT exist”<
   ----------------------------------------------------------
   方法三:
   用下面第113條的_access函式同樣可以
   ----------------------------------------------------------
   if(_access(“f:\win98”,0)!=-1)
   cout<<“exist”<
   else
   cout<<“NOT exist”<
   ----------------------------------------------------------
   方法四:
   用PathFileExists函式,見MSDN介紹,需要的條件同方法一。
   還有一個:BOOL SHGetPathFromIDList(LPCITEMIDLIST pidl,LPTSTR pszPath);
     Converts an item identifier list to a file system path.
  110 去掉單文件標題欄上的“無標題— ”:http://community.csdn.net/Expert/topic/4454/4454093.xml?temp=.2896997
  111 開啟顯示器: ::SendMessage(GetSafeHwnd(), WM_SYSCOMMAND, SC_MONITORPOWER, -1); //從bobob的blog上抄來的_
     關閉顯示器: ::SendMessage(GetSafeHwnd(), WM_SYSCOMMAND, SC_MONITORPOWER, 1); //從bobob的blog上抄來的_
     得到它的工作狀態:
  休眠狀態是指用SendMessage(Handle, WM_SYSCOMMAND, SC_MONITORPOWER, -1)關閉的
   --------------------------------------------------------------------------------
  The GetDevicePowerState function is supposed to retrieve the current power state of the specified device. However, Apps may fail to use GetDevicePowerState on the display, as they can’t get a handle on “\.\Display#”, while the # index is 1-based, or “\.\LCD”, for security reasons.
  If you are trying to do this on Windows XP, then you can use SetupDiGetDeviceRegistryProperty and Property: SPDRP_DEVICE_POWER_DATA to get the power management information. This is documented in the Windows XP DDK.
  The WMI Class Win32_DesktopMonitor does not report the power state. use SPI_GETPOWEROFFACTIVE or DeviceIOControl with IOCTL_VIDEO_GET_POWER_MANAGEMENT will simply reports power management is enabled or not. SPI_GETPOWEROFFACTIVE just determines whether the power-off phase of screen saving is enabled or not.
  BTW, you can always use the SetThreadExecutionState or other APIs (you have used) to switch ON the monitor no matter the monitor is in the ON or OFF state.
  References
   http://msdn.microsoft.com/library/en-us/Display_r/hh/Display_r/VideoMiniport_Functions_b47b2224-5e0b-44af-9d04-107ff1299381.xml.asp
   http://msdn.microsoft.com/library/en-us/wmisdk/wmi/win32_desktopmonitor.asp
  112 得到系統時間、語言等的設定
   GetLocaleInfo(LOCALE_USER_DEFAULT, LOCALE_ITIME, lpLCData, cchData); //從bobob的blog上抄來的_
  113 檔案是否存在 (記得先包含標頭檔案#include )
   ----------------------------------
   if(_access(“c:\somefile.txt”,0)!=-1)
   //存在
   else
   //不存在
   ---------------------------------
   還有一個方法:
   ---------------------------------------------
   if(GetFileAttributes(“f:\test.txt”)!=0xFFFFFFFF)
   {
   //存在
   }
   else
   {
   //不存在
   }
   ---------------------------------------------
  114 得到剪貼簿資料
   -------------------------------------------------
   if ( OpenClipboard() )
   {
   HANDLE hData = GetClipboardData(CF_TEXT);
   char * buffer = (char
)GlobalLock(hData); //剪貼簿中的文字內容儲存在buffer中
   GlobalUnlock(hData);
   CloseClipboard();
   }
   ----------------------------------------------
  115 在CStatic上面關聯圖片
   ----------------------------------------------
   CStatic* pWnd = (CStatic*)GetDlgItem(IDC_STATIC);
   pWnd->ModifyStyle(0, SS_BITMAP);
   pWnd->SetBitmap((HBITMAP)::LoadImage(0,
   “c:\zzzzz.bmp”, //只能顯示.bmp檔案
   IMAGE_BITMAP,
   0,0,LR_CREATEDIBSECTION |LR_DEFAULTSIZE |LR_LOADFROMFILE));
   ----------------------------------------------
  116 顯示一個開啟資料夾的對話方塊,並得到使用者選擇的目錄:
   -------------------------------------------
   char szDir[MAX_PATH];
   BROWSEINFO bi;
   ITEMIDLIST pidl;
   bi.hwndOwner = this->m_hWnd;
   bi.pidlRoot = NULL;
   bi.pszDisplayName = szDir;
   bi.lpszTitle = “請選擇目錄”;//strDlgTitle;
   bi.ulFlags = BIF_RETURNONLYFSDIRS;
   bi.lpfn = NULL;
   bi.lParam = 0;
   bi.iImage = 0;
  
   pidl = SHBrowseForFolder(&bi);
   if(pidl == NULL)
   return;
   if(!SHGetPathFromIDList(pidl, szDir))
   return;
   AfxMessageBox(szDir); //szDir中存放的內容為使用者選定的目錄
   ------------------------------------------------
  117 去除字串中指定的字元:
   -----------------------------------------
   CString strtemp;
   strtemp.Format("%s",“abc\n123\ndef”);
   strtemp.Remove(’\n’); //這裡以去除換行符為例,結果儲存在strtemp中了
   -------------------------------------------
  118 有關資料結構的地址:http://student.zjzk.cn/course_ware/data_structure/web/main.htm
   119 假如當前時間2005-09-09,如何計算在該時間前12345天,是哪年哪月哪日?
   ---------------------------
   CTime tm(2005,9,9,0,0,0);
   tm-=86400
12345;
   cout<<
   ----------------------------
  120 PeekMessage是幹什麼用的: http://community.csdn.net/Expert/topic/4462/4462828.xml?temp=.8852045
  121 拖動控制元件時實現類似windows拖動視窗的效果:CRectTracker
   Mackz朋友的blog中有它的範例:http://blog.csdn.net/Mackz/archive/2005/10/27 /517747.aspx
  122 有關UNICODE、ANSI字符集和相關字串操作的總結:http://community.csdn.net/Expert/FAQ/FAQ_Index.asp?id=199372
  123 尋找系統中的印表機:EnumPrinters
  124 用程式碼加入外部模組的方法:#pragma comment(lib,“mylib.lib”)
  125 判斷指定點是否在一個矩形框內:CRect::PtInRect(POINT point)
  126 winAPI 函式GetTextExtentPoint32()可以得出一個以畫素為單位的字串的寬度。
  127 RGB轉換成YV12(YUV 4:2:0)的方法:http://www.fourcc.org/fccyvrgb.php
   128 獲得指定程序佔用記憶體的情況,用GetProcessMemoryInfo()函式。
  129 把CONSOLE程式的輸出匯入到檔案中,用程式控制:http://community.csdn.net/Expert/topic/4403/4403431.xml?temp=.7469599
   http://www.codeproject.com/dialog/quickwin.asp
  130 把 CRichEditCtrl中的文字儲存到rtf檔案:http://community.csdn.net/Expert/topic/4478 /4478640.xml?temp=.1313135
     在codeproject上還有從CRichEditCtrl類派生新類的,功能增強了很多:http://www.codeproject.com/richedit/autoricheditctrl.asp
     還有一個開發類似寫字板那樣程式的完整範例:http://www.codeproject.com/tools/simplewordpad.asp
  131 MFC中使用ATL字元轉換巨集:在你的函式開關加上USES_CONVERSION;語句,詳見MSDN或這裡:http://community.csdn.net/Expert/topic/4479/4479609.xml?temp=.6256983
  132 如何建立共享目錄:直接呼叫標準的Win32API函式NetShareAdd和NetShareDel
     詳見MSDN 及:http://community.csdn.net/Expert/topic/4481/4481371.xml?temp=.4405023
  133 點陣圖檔案讀寫基礎:http://www.vckbase.com/document/viewdoc/?id=674
  134 用 VC實現支援多語言的程式:http://www.vckbase.com/document/viewdoc/?id=1102 //還沒試過,以後用到了再仔細研究吧
  135 Menu系列函式:
   GetMenu
   GetMenuInfo
   GetMenuItemCount
   GetMenuItemID
   GetMenuString
   EnableMenuItem
   CheckMenuItem
   ModifyMenu
   RemoveMenu
   InsertMenu
   GetSystemMenu
   ::LoadMenu
   ::SetMenu
  136 得到 SYSTEMMENU(系統選單)的高度:GetSystemMetrics(SM_CYMENU);
     得到當前螢幕解析度:
   GetSystemMetrics(SM_CXFULLSCREEN); //得x值(如1024)
   GetSystemMetrics(SM_CYFULLSCREEN); //得y值( 如768-工作列高度)
   此外這個函式還可以得到很多別的系統設定值,詳見MSDN:http://msdn.microsoft.com/library /default.asp?url=/library/en-us/sysinfo/base/getsystemmetrics.asp
   137 在屬性頁控制元件的標籤上加圖片:http://www.codeguru.com/cpp/controls/propertysheet/article.php/c611/
   http://community.csdn.net/Expert/topic/4492/4492593.xml?temp=.9977991
   --------------------------------------------------
   BOOL CMyPropSheet::OnInitDialog()
   {
   BOOL bResult = CPropertySheet::OnInitDialog();
   m_imageTab.Create( IDB_TABIMAGES, 13, 1, RGB(255,255,255) );
   CTabCtrl pTab = GetTabControl();
   pTab->SetImageList( &m_imageTab );
  
   TC_ITEM tcItem;
   tcItem.mask = TCIF_IMAGE;
   for( int i = 0; i < 3; i++ )
   {
   tcItem.iImage = i;
   pTab->SetItem( i, &tcItem );
   }
   return bResult;
   }
   ----------------------------------------------------
  138 這裡有很多 CRichEditCtrl控制元件的高階用法:http://www.codeguru.com/Cpp/controls/richedit/
  139 CGridCtrl控制元件的一些應用:http://www.vckbase.com/code/listcode.asp?mclsid=3& amp;sclsid=327
  140 一個不錯的地方:http://www.vckbase.com/document /listdoc.asp?mclsid=3&sclsid=323
  141 怎樣使右鍵選單也能變灰、打勾:http://community.csdn.net/Expert/topic/4501/4501123.xml?temp=.4074823
  142 MD5加密解密的API:http://community.csdn.net/Expert/topic/4502 /4502325.xml?temp=.6894647
   MD5Init
   MD5Final
   MD5Update
  143 用CBrush::CreateStockObject(HOLLOW_BRUSH);或 CBrush::CreateStockObject(NULL_BRUSH);這兩個可以建立鏤空的畫刷。
  144 建立不規則窗體:http://www.vckbase.com/document/viewdoc/?id=1345
  145 拖動一個沒有標題欄的窗體:http://community.csdn.net/Expert/topic/4499 /4499796.xml?temp=6.763858E-02
  146 遮蔽瀏覽器中的彈出廣告,下面地址中是在ATL中採用BHO服務的方法:http://www.codeproject.com/atl/popupblocker2.asp
   CSDN上有個討論貼:http://community.csdn.net/Expert/topic/4496 /4496918.xml?temp=.157284
  147 遠端執行緒注入:
   http://www.codeproject.com/threads/RmThread.asp
   http://www.codeproject.com/library/InjLib.asp
   http://www.codeproject.com/win32/Remote.asp
  148 CEditView中兩個函式的用法:
   GetEditCtrl().ModifyStyle (0 , WS_VSCROLL |ES_AUTOHSCROLL |ES_AUTOVSCROLL |WS_HSCROLL |ES_WANTRETURN | ES_MULTILINE);
   GetEditCtrl().GetSel(m_nStartChar, m_nEndChar ) ;
  149 給對話方塊窗體底部加上狀態條,把下面程式碼加進對話方塊的OnInitDialog()函式中:
   -----------------------------------------------------------
   static UINT indicators[] =
   {
   ID_SEPARATOR, // status line indicator
   ID_INDICATOR_CAPS,
   ID_INDICATOR_NUM,
   ID_INDICATOR_SCRL,
   };
   //下面m_wndStatusBar必須先在對話方塊類中宣告:CStatusBar m_wndStatusBar;
   if (!m_wndStatusBar.Create(this,WS_CHILD|WS_VISIBLE|WS_BORDER)||
   !m_wndStatusBar.SetIndicators(indicators,
   sizeof(indicators)/sizeof(UINT)))
   {
   AfxMessageBox(“Status Bar not created!”, NULL, MB_OK );
  
   }
   CRect rect;
   this->GetWindowRect(&rect);
   m_wndStatusBar.MoveWindow(2,rect.bottom-GetSystemMetrics(SM_CYSIZE)-27,rect.Width()-4,20);
   m_wndStatusBar.ShowWindow(SW_SHOW);
   m_wndStatusBar.SetWindowText(“Ready”);
   -----------------------------------------------------------
   把上面程式碼加在OnInitDialog裡,注意:m_wndStatusBar變數的宣告語句CStatusBar m_wndStatusBar;要放在你的對話方塊類C
*Dlg中才行。
  150 從登錄檔中讀取cpu的頻率:
   讀取 ~MHz 這個鍵值 ,記住那鍵前有個~別忘了,在登錄檔的HKEY_LOCAL_MACHINE\Hardware\Description\System \CentralProcessor\0 //0 為第一個cpu
   Hardware\Description\System\CentralProcessor\1 //1 為第二個cpu
    得到cpu的數量,摘自:http://community.csdn.net/Expert/topic/4635 /4635246.xml?temp=.7182123
   -----------------------------------------------------------------------
   SYSTEM_INFO siSysInfo;
   GetSystemInfo(&siSysInfo);
   printf(" Number of processors: %u\n", siSysInfo.dwNumberOfProcessors);
   -----------------------------------------------------------------------
  151 改變CStatic控制元件的前景、背景色:http://community.csdn.net/Expert/topic/4507 /4507710.xml?temp=.1524164
   處理WM_CTLCOLOR訊息:
   ---------------------------------------------------------------------
   HBRUSH CQQDlg::OnCtlColor(CDC
pDC, CWnd
pWnd, UINT nCtlColor)
   {
   HBRUSH hbr;
  
   // TODO: Change any attributes of the DC here
   if(CTLCOLOR_STATIC == nCtlColor)
   //if(CTLCOLOR_STATIC == nCtlColor && pWnd->GetDlgCtrlID()==IDC_TOOL) //改成這樣就只對IDC_TOOL這一個靜態文字控制元件起作用了
   {
   pDC->SetBkColor(RGB(255,255,255)); //背景色為白
   pDC->SetTextColor(RGB(0,0,0)); //前景色為黑
   hbr = CreateSolidBrush(RGB(255,255,255)); //其它區域也為白
   //上面三行程式碼改成下面這三行就建立空心刷子,就可以實現在背景上寫字的效果了
   //pDC->SetBkMode(TRANSPARENT);
   //pDC->SetTextColor(RGB(0,0,0));
   //hbr = CreateStockObject(NULL_BRUSH);
   }
   else
   hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
   // TODO: Return a different brush if the default is not desired
   return hbr;
   }
   ----------------------------------------------------------------------
   再加一個判斷if (pWnd->GetDlgCtrlID()==IDC
…)就可以指定是改變哪個的顏色了,其它控制元件的顏色的改變方法和這個大同小異。
  152 怎樣獲得字型得寬度,高度,間距等資訊:GetTextMetrics
  153 為了讓你對i++有個更清楚的認識,先看如下程式碼:
   -------------------
   int i=2;
   i=(i++) % 3;
   printf(“i=%d”,i); //這裡輸出i=?呢
   -------------------
   下面是前兩行程式碼的彙編程式碼:
   ------------------------------------------------------------------------------------------------------------------
   00401778 mov dword ptr [ebp-4],2 把值2寫入記憶體中[ebp-4]指向的位置(後面稱變數i) //相當於i=2
   0040177F mov eax,dword ptr [ebp-4] 把i的當前值2賦於eax中 //把eax當成了i的臨時變量了
   00401782 cdq
   00401783 mov ecx,3 把3賦於ecx中 //同樣ecx也成了臨時變量了
   00401788 idiv eax,ecx eax % ecx(2%3),結果放入edx中(等於2)
   0040178A mov dword ptr [ebp-4],edx 把edx中的值2寫入變數i //相當於計算i=2 % 3
   0040178D mov edx,dword ptr [ebp-4] 把i的值2賦於edx //現在edx成了i的臨時變數
   00401790 add edx,1 edx中的值加上1
   00401793 mov dword ptr [ebp-4],edx 把edx中的值3寫入變數i //上面三條命令完成i=i+1
   ------------------------------------------------------------------------------------------------------------------
   最終的結果i=3,如果把運算子%換成+,則結果i=6(注意,這是在VC下得到的結果,不同的編譯器得到的結果可能會不同!)
  154 我的程式知道一個應用程式的控制代碼,如何使該應用程式得到焦點:http://community.csdn.net/Expert/FAQ /FAQ_Index.asp?id=192872
   ---------------------------------------------------------------
   if(::GetForegroundWindow()!=m_MainWnd)
   ::SetForegroundWindow(m_MainWnd);
   ::SetFocus( m_MainWnd);
   ---------------------------------------------------------------
   或:
   ------------------------------------
   ::ShowWindow(m_MainWnd, SW_SHOW);
   ::SetForegroundWindow(m_MainWnd);
   ------------------------------------
  155 在對話方塊的標題欄上新增按鈕:http://www.codeguru.com/Cpp/W-D/dislog/titlebar/article.php/c1897
  156 判斷當前執行緒的當前輸入法是中文還是英文輸入法(至於到底是哪種中文輸入法我也不知道):
   -------------------------------------------------------------------------
   HKL hKl = GetKeyboardLayout(0); //這裡0表示當前執行緒,要查指定執行緒的話可以用指定執行緒的識別符號代替
   if (ImmIsIME(hKl))
   AfxMessageBox(“當前是中文輸入法。”);
   -------------------------------------------------------------------------
   其它地區語言輸入法的資訊在MSDN中搜索:Table of Language Identifiers
  157 動態建立靜態控制元件並載入.bmp圖片,先在對話方塊類中定義成員變數:
   ----------------------------------------------------
   public:
   CStatic m_pp; //這個是在對話方塊類中定義的
   再:
   CBitmap cb;
   cb.LoadBitmap(IDB_BITMAP1);
   m_pp.Create("",WS_CHILD|WS_VISIBLE|SS_BITMAP,CRect(10,10,200,200),this,101);
   m_pp.SetBitmap((HBITMAP)cb);
   ----------------------------------------------------
  158 DLL中建立視窗時對於資源等,需要先進行狀態處理:AFX_MANAGE_STATE(AfxGetStaticModuleState( ));
  159 把圖片中某種指定色變成透明色,在對話方塊的OnPaint()中加入類似如下程式碼:
   -------------------------------------------------------------------------------
   //CImage imgOriginal;
   int XWitdh=imgOriginal.GetWidth();
   int XHeight=imgOriginal.GetHeight();
   COLORREF TransparentColor= RGB(0x00,0x00,0x00); //這裡黑色變成透明色
   CPaintDC dc(this);
   imgOriginal.TransparentBlt(dc.m_hDC,0,0,XWitdh,XHeight,TransparentColor);
   imgOriginal.StretchBlt(dc,0,0,imgOriginal.GetWidth()/2,imgOriginal.GetHeight()/2,SRCCOPY);
   -------------------------------------------------------------------------------
  160 怎麼修改MFC單文件程式的標題,經常有人在網上問這個問題,在C*App::InitInstance()的程式碼中加入一行就行了:
   -----------------------------------------------------------
   BOOL CJPGGifApp::InitInstance()
   {
   AfxEnableControlContainer();
   … //這裡省略自動生成的程式碼
   // The one and only window has been initialized, so show and update it.
   m_pMainWnd->ShowWindow(SW_SHOW);
   m_pMainWnd->UpdateWindow();
   m_pMainWnd->SetWindowText(“我的標題”); //加入這一行就可以了,注意要加在ShowWindow和UpdateWindow的後面
  
   return TRUE;
   }
   ------------------------------------------------------------
  161 怎麼使用雙緩衝防閃爍:http://community.csdn.net/Expert/topic/4236 /4236258.xml?temp=5.736941E-02 <==========還沒試,不知道有沒有效果
  162 滑鼠左右鍵同時按下與滑鼠與鍵盤同時按下的識別:http://www.vckbase.com/article/misc/0017.htm
  
    玩過Windows的掃雷遊戲嗎?該遊戲中就有一個同時按下滑鼠左右鍵的操作,其實對同時按下滑鼠左右鍵的判斷並不複雜,判斷方法與判斷滑鼠按鍵是否與Ctrl和Shift同時按下的方法相同,這裡要用到滑鼠訊息中的wparam項,其中含有我們想要的幾個按鍵的狀態。定義如下:
  
    (1)MK_CONTROL:Ctrl鍵按下時置1;
  
    (2)MK_LBUTTON:滑鼠左鍵按下時置1;
  
    (3)MK_MBUTTON:滑鼠中鍵按下時置1;
  
    (4)MK_RBUTTON:滑鼠右鍵按下時置1;
  
    (5)MK_SHIFT:Shift鍵按下時置1。
  
    通過判斷這幾個標誌位可以得到同時按下的幾個鍵的狀態,從而判斷是否有其它鍵同時按下。
  
  
  163 資料庫方面:http://community.csdn.net /Expert/topic/4500/4500287.xml?temp=.2734644 <=================還沒試
  164 取得Excel中文字框的內容:http://community.csdn.net/Expert/topic/4356/4356294.xml?temp=.41
   165 Microsoft Office Development with Visual Studio:http://msdn.microsoft.com/library/default.asp?url=/library/en-us /dnoxpta/html/vsofficedev.asp
  166 讓編譯器忽略某種警告:
   --------------------------------
   #pragma warning (disable : 4101)
   --------------------------------
   上面的程式碼加上後編譯器不會再出現warning C4101: ‘i’ : unreferenced local variable這樣的警告了。
  167 列舉網頁各個元素,參考:
   http://www.vckbase.com/document/viewdoc/?id=288
   http://www.vckbase.com/document/viewdoc/?id=1446
  168 rundll32.exe,這個程式很方便,用它可以呼叫任何 DLL