VC/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->message==WM_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,24*34); //所有元素初始化成-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表示)如何肯定亮度等級: 
   加權算出灰度值:R*0.21+Green*0.70+Blue*0.09,或:
   ((紅色值 X 299) + (綠色值 X 587) + (藍色值 X 114)) / 1000
  56 對已畫在CDC上的圖片進行處理,實現任意比例的透明度。
   MSDN:http://msdn.microsoft.com/msdnmag/issues/05/12/CatWork/
  實現方法是:
  一、用GetCurrentBitmap獲得DC上的CBitmap指針;
  二、用GetBitmapBits獲得CBitmap上的圖像數據流;
  三、對圖像數據流中每一個字節進行轉換,轉換的公式爲
   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 中的函數。你只要給它提供 DLL、函數名以及要傳遞的參數便可。Rundll32.exe 絕對多才多藝,你能夠用它來關閉和重啓 Windows,建立快捷方式以及啓動控制面板程序。只要知道要調用的DLLs,一切都搞掂。你能夠象下面這樣用 rundll32.exe 從命令行打開一個 URL:
   --------------------------------------------------------
   rundll32.exe url.dll,FileProtocolHandler www.vckbase.com
   --------------------------------------------------------
   url.dll 中的函數 FileProtocolHandler 負責這個工做。
  169 HDC===>CDC*
   ----------------------------------
   HDC hdc=::GetWindowDC(this->m_hWnd); //得到窗口標題欄區域
   CDC* pDC = CDC::FromHandle(hdc);
   ----------------------------------
   CDC*===>HDC,能夠經過CDC的操做符HDC()來實現:
   ------------------
   HDC hdc=HDC(pDC); //或:HDC hdc=pDC->m_hdc;
   ------------------
  170 操做狀態欄,下面以在狀態欄中顯示鼠標當前座標爲例,代碼以下:
   -------------------------------------------------------------------------------------------
   CMyView::OnMouseMove(UINT nFlag,CPoint point)
   {
   CClientDC dc(this);
   CMainFrame *pFrame = (CMainFrame *)AfxGetApp()->m_pMainWnd;
   CStatusBar *pStatusBar = (CStatusBar *)&pFrame->m_wndStatusBar;
   CString str;
   str.Format("x:%d,y:%d",point.x,point.y);
   CSize size = dc.GetTextExtent(str); //獲得文本所需的大小尺寸
   int nIndex = pStatusBar->CommandToIndex(ID_INDICATOR_MOUSEPOS);
   pStatusBar->SetPaneInfo(nIndex,ID_INDICATOR_MOUSEPOS,SBPS_NORMAL,size.cx); //按文本所需的寬度設置狀態欄寬度
   pStatusBar->SetPaneText(nIndex,str);
  
   CView::OnMouseMove(nFlags, point);
   }
   -------------------------------------------------------------------------------------------
  171 一些工具的簡單介紹:http://www.yesky.com/SoftChannel/72347895172431872/20050306/1918484.shtml
  172 一個有爭論的問題,關於delete p和delete []p的區別所在:http://community.csdn.net/Expert/topic/4402/4402653.xml
   http://community.csdn.net/Expert/topic/4411/4411478.xml?temp=.5596582
  173 GetDeviceCaps,一個可獲得不少關於指定設備的具體信息的函數
  174 註冊表中:HKEY_CURRENT_USER\KeyboardLayout\preload分支下分別有輸入法對應的一、二、三、4幾個主鍵,其鍵值一一對應已安裝的輸入法,如:1的鍵值00000409是英文輸入法,知道具體輸入法和鍵值的對應關係後,咱們能夠根據獲得的鍵值判斷用戶的當前輸入法了。
  175 在托盤區處顯示氣泡提示:http://msdn.microsoft.com/library/default.asp?url= /library/en-us/shellcc/platform/shell/reference/ifaces/iusernotification/SetBalloonInfo.asp
  176 設置對話框的背景色的簡單方法,其實只要在CWinapp的InitInstance的裏面添加一行代碼就好了:
   ---------------------------------------------------------
   BOOL CBOOKApp::InitInstance()
   { 
   AfxEnableControlContainer();
   SetDialogBkColor(RGB(213,240,227),RGB(173,7,95)); //添加這行,前者爲背景色,後者爲前景色
   ..... 
   }
   ---------------------------------------------------------
  177 顯示gif 動畫表情的CRechEdit控件:http://lzzqqq.blogchina.com/2819759.html
  178 單文檔程序,如何使程序窗口一開始就固定在某一尺寸:PreCreateWindow中指定大小.能夠去掉框架窗口的WS_THICKFRAME風格來使窗口不可改變大小,能夠選擇性的去掉WS_MAXIMIZEBO風格。也能夠處理WM_GETMINMAXINFO消息來限制視圖的大小。
  179  CSpinButtonCtrl:http://www.ruanxun.com/HArticle78020.aspx
  180 限制用戶調整窗口的最大、最小尺寸,在窗口的WM_GETMINMAXINFO消息響應函數中處理,如:
   ---------------------------------------------------------------------------
   void CQQDlg::OnGetMinMaxInfo(MINMAXINFO FAR* lpMMI) 
   {
   // TODO: Add your message handler code here and/or call default
   lpMMI->ptMinTrackSize.x=200; //限制最小寬度,單位爲像素,下同
   lpMMI->ptMinTrackSize.y=400; //限制最小高度
   lpMMI->ptMaxTrackSize.x=250; //限制最大寬度
   lpMMI->ptMaxTrackSize.y=500; //限制最大高度
   CDialog::OnGetMinMaxInfo(lpMMI);
   }
   ---------------------------------------------------------------------------
  181 獲取桌面全部圖標的標題,代碼示範瞭如何使用VirtualAlloc(),WriteProcessMemory() 和 ReadProcessMemory() 在不一樣的進程中分配內存。用Windows的消息得到圖標的名稱:
     下載源碼:http://www.vckbase.com/code/listcode.asp?mclsid=1&sclsid=101& page=6
  182 一臺機器可能有不止一個CD-ROM驅動器。如今CD-ROM已是PC機的標準配置,此外再裝個可擦寫的光盤驅動,甚至是DVD都是很常見的事情。無論一臺機器上裝多少個不一樣的驅動器,如何找到它們呢?下載源碼:http://www.vckbase.com/code /listcode.asp?mclsid=1&sclsid=101&page=6
  183 作一個相似文件快捷方式中查找目標的功能,Net 2003中的MSDN,找到了能夠實現該功能的API,SHOpenFolderAndSelectItems()函數.....本程序能夠調用 Explore打開指定文件夾,並把指定文件置爲選定狀態,下載源碼:http://www.vckbase.com/code /listcode.asp?mclsid=1&sclsid=101 
  184 字符串轉爲Unicode:
   -----------------------------------------------------------------
   WCHAR wsz[MAX_PATH];
   CString str="字符串";
   #ifdef _UNICODE
   wcscpy(wsz, str); //若是工程支持Unicode的話用wcscpy函數
   #else
   //工程不支持的話用MultiByteToWideChar函數轉換 
   MultiByteToWideChar(CP_ACP, 0, str, -1, wsz, MAX_PATH); 
   #endif
   -----------------------------------------------------------------
     也能夠用c的函數庫的函數:
   mbtowc 轉一個字符
   mbstowcs 轉字符串
  185 向一個進程外窗口發送WM_SHOWWINDOW消息,隱藏或顯示該窗口:
   -----------------------------------------------------
   HWND hwnd=::FindWindow(0,"ddd"); //隱藏"ddd"窗口
   ::PostMessage(hwnd,WM_SHOWWINDOW,FALSE,SW_OTHERZOOM); //參數3爲FALSE時隱藏,爲TRUE則顯示該窗口
   -----------------------------------------------------
   上面代碼有可能失敗,由於WM_SHOWWINDOW只是窗口準備改變狀態時,系統發出的消息,並不能控制窗口狀態的改變。另外一個方法能夠把後面一句改爲:ShowWindow(hwnd,SW_HIDE);
  186 使用24位色彩圖標的工具條,有源碼範例的:http://www.codeguru.com/Cpp/controls/toolbar/article.php/c2537
   187 設置CListCtrl控件圖標間距離的方法:CListCtrl::SetIconSpacing
  188 設置層疊窗口的透明色函數:SetLayeredWindowAttributes,部分代碼參考:
   -------------------------------------------------------------------------
   SetWindowLong(this->m_hWnd,GWL_EXSTYLE,GetWindowLong(this->m_hWnd,GWL_EXSTYLE)|WS_EX_LAYERED);
   HWND hWnd=this->m_hWnd; 
   typedef DWORD (WINAPI *PSLWA)(HWND, DWORD, BYTE, DWORD);
   PSLWA pSetLayeredWindowAttributes;
   HMODULE hDLL = LoadLibrary ("user32");
   pSetLayeredWindowAttributes = (PSLWA) GetProcAddress(hDLL,"SetLayeredWindowAttributes");
   if (pSetLayeredWindowAttributes != NULL)
   {
   pSetLayeredWindowAttributes (hWnd,0,20,LWA_ALPHA);
   }
   FreeLibrary(hDLL);
   -------------------------------------------------------------------------
  189 關於滾動條方面的,GetScrollInfo得到滾動條位置信息:
   ------------------------------------
   SCROLLINFO si;
   ZeroMemory(&si, sizeof(si));
   si.cbSize = sizeof(si);
   si.fMask = SIF_TRACKPOS;
   // Call GetScrollInfo to get current tracking position in si.nTrackPos
   GetScrollInfo(hwnd, SB_HORZ, &si);
   -----------------------------------
   讓滾動條滾動須要發送相應的WM_VSCROLL和WM_HSCROLL消息:
   SendMessage (hwnd, WM_VSCROLL, SB_TOP, 0) ;
   SetScrollInfo函數改變滾動條的位置。
  190 切換到軟鍵盤:call ImmSetConversionStatus with IME_CMODE_SOFTKBD
  191 用 SetVolumeLabel函數修改U盤卷標時聽說windows會刷新裏面的內容。 <===================還沒試
  192 基於對話框的MFC程序想要具備打印功能:http://community.csdn.net/Expert/topic/4557/4557847.xml?temp=.5908472
  193 打開那個標題爲"打開方式..."的對話框來選擇程序:WinExec("rundll32.exe shell32.dll,OpenAs_RunDLL path\filename",SW_RESTORE);
  194 如何屏蔽主窗口的最大化按鈕,並讓其自動最小化:http://community.csdn.net/Expert/topic/4563/4563807.xml?temp=.9465906
  195 從立體聲的wave文件中分別提出左聲道和右聲道的聲音數據,實現音頻文件的播放——單聲道錄音、立體聲錄音並保存爲.wav文件,以及VC.NET簡單實現GIF動畫:
   http://www.vckbase.com/code/listcode.asp?mclsid=7
  196 DirectX Input得到鼠標輸入:http://www.vckbase.com/code/listcode.asp?mclsid=7& sclsid=&page=2
  197 數字水印算法的實現:http://www.vckbase.com/code /listcode.asp?mclsid=7&sclsid=&page=3
  198 程序如何加入全局熱鍵:RegisterHotKey註冊熱鍵,響應WM_HOTKEY消息來截獲熱鍵:http://www.xiaozhou.net/cooldog /blogview.asp?logID=78
  199 讀取其它進程內存中的數據:ReadProcessMemory
  200 給程序加上系統托盤圖標:http://www.vckbase.com/bbs/prime/viewprime.asp?id=260
   下面是簡單的代碼:
   --------------------------------------------------------------
   NOTIFYICONDATA nid;
   //初始化系統托盤圖標
   nid.cbSize = sizeof(NOTIFYICONDATA);
   nid.hWnd = m_hWnd;
   nid.uID = 100;
   nid.uFlags = NIF_ICON|NIF_MESSAGE|NIF_TIP;
   nid.uCallbackMessage = WM_USER+20;
   nid.hIcon=LoadIcon(NULL,IDI_APPLICATION); //圖標
   strcpy(nid.szTip, "My Tooltip Text"); //提示
   Shell_NotifyIcon(NIM_ADD, &nid);
   --------------------------------------------------------------
  201 單文檔中打印預覽,發送消息模擬點擊菜單中「打印預覽」:
   ---------------------------------------------------------------------------------
   ::SendMessage(this->GetSafeHwnd(), WM_COMMAND, ID_FILE_PRINT_PREVIEW, 0);
   ---------------------------------------------------------------------------------
  202 獲得當前登錄用戶的用戶名:GetUserName/GetUserNameEx
  203 設置發生改變後系統會自動更新,要善加利用:::SendMessage(HWND_BROADCAST,WM_SETTINGCHANGE,NULL,NULL);
  204 拖動一個沒有標題欄的窗口:
   -----------------------------------------------------------------------
   void CMyControl::OnLButtonDown(UINT nFlags, CPoint point) 
   {
   // TODO: Add your message handler code here and/or call default
   UNUSED_ALWAYS(nFlags);
   if (!(GetWindowLong(m_hWnd, GWL_STYLE) & WS_CHILD))
   PostMessage(WM_NCLBUTTONDOWN, HTCAPTION, MAKELPARAM(point.x,point.y));
   else
   GetParent()->PostMessage(WM_NCLBUTTONDOWN, HTCAPTION, MAKELPARAM(point.x,point.y));
   }
   -----------------------------------------------------------------------
  205 用指定字體在dc中寫字:
   -------------------------------------------------------
   HDC hdc = ::GetDC(NULL);
   HFONT hfont,holdfont;
   hfont = (HFONT)GetStockObject(OEM_FIXED_FONT);
   holdfont = (HFONT)SelectObject(hdc,hfont);
   TextOut(hdc,10,50,"\1\2\3\4",8);
   SelectObject(hdc,holdfont);
   DeleteDC(hdc);
   -------------------------------------------------------
  206 桌面主題更改的消息:WM_THEMECHANGED
  207 修改菜單項的名稱:
   CMenu *pMenu = AfxGetMainWnd()->GetMenu()->GetSubMenu(0);
   pMenu->ModifyMenu(0,MF_BYPOSITION,0,"Test");
  208 __LINE__表示本行代碼在程序中第幾行,一樣:__FILE__表示當前文件的全路徑
   ----------------------------------
   CString str;
   str.Format("Line is %d", __LINE__); //指這行
   AfxMessageBox(str);
   ----------------------------------
  209 查看系統函數的源代碼的方法:裝一個Visual Assist X,想看某個函數的時候ALT + G
  210 一直以來,想實現窗口透明程度不一樣,或局部透明,局部不透明,但這也只是夢想,下面這個函數看來可讓咱們夢想成真:UpdateLayeredWindow
  211  LOGFONT各成員的意義:
   ---------------------------------------------------------------------------------
   LOGFONT lf;
   lf.lfHeight=-80; //字體字符的高度
   lf.lfWidth=0; //字符平均寬度
   lf.lfEscapement=45; //文本行逆時針旋轉45度
   lf.lfOrientation=0; //字符角度
   lf.lfWeight=FW_HEAVY; //字符的粗細度
   lf.lfItalic=FALSE; //傾斜
   lf.lfUnderline=FALSE; //下劃線
   lf.lfStrikeOut=FALSE; //刪除線
   lf.lfCharSet=GB2312_CHARSET; //中文字符集
   lf.lfOutPrecision=OUT_STROKE_PRECIS; //字體輸出結果和要求的匹配程度
   lf.lfClipPrecision=CLIP_STROKE_PRECIS; //如何裁剪落於裁剪區以外的字符
   lf.lfQuality=DRAFT_QUALITY; //字體屬性匹配的精確程度
   lf.lfPitchAndFamily=VARIABLE_PITCH | FF_MODERN; //字體間距和字體族
   strcpy(lf.lfFaceName,"楷體_GB2312"); //楷體
   m_font.CreateFontIndirect(&lf); //m_font爲類的成員變量:CFont m_font;
   ---------------------------------------------------------------------------------
  212 指向指象主對話框的指針:AfxGetApp()->m_pMainWnd或AfxGetApp()->GetMainWnd()
  213 去除F1的幫助功能,重載WM_HELPINFO消息:
   ------------------------------------------------------
   BOOL CYourdlgDlg::OnHelpInfo(HELPINFO* pHelpInfo) 
   {
   return TRUE;//CDialog::OnHelpInfo(pHelpInfo);
   }
   ------------------------------------------------------
  214 串口(包括USB 轉串口)幾個小問題:http://community.csdn.net/Expert/topic/4470 /4470922.xml?temp=.9018061
  215 控制輸入法相關的幾個函數:ImmGetContext、 ImmGetConversionStatus、ImmSetConversionStatus、ImmReleaseContext等
   216 限定輸出字符的矩形範圍:ExtTextOut或DrawText
  217 控制滾動條的顯示或隱藏:CWnd::ShowScrollBar(UINT nBar,BOOL bShow = TRUE)
  218 註冊表中:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum下IDE和SCSI分支中枚舉全部這兩種設備。
  219 更改當前時區:SetTimeZoneInformation
     得到當前時區:GetTimeZoneInformation
  220 直接讀取硬盤的指定扇區:
   (1)用匯編;
   (2)直接用CreateFile("\\.\PHYSICALDRIVE0", ...)打開物理磁盤設備便可(物理磁盤設備都是從0開始排號的,0表示第一塊硬盤,1表示第二塊硬盤....),這樣用SetFilePointer能夠隨意讀取硬盤上任何位置的東西!至於扇區嘛,通常都是512字節爲1扇區的,本身換算就是了~           <===================還沒試,不過這裏有更多內容:http://www.51cto.com/html/2005/1110 /11133.htm
  221 得到本機並口的起始地址:
  能夠讀取bios數據區域,固然只能在未進入保護模式的操做系統前或 dos下讀取
  段地址:00H 
   
  408H 字 計算機上0號並行打印機適配器的基地址, 
  40AH 字 計算機上1號並行打印機適配器的基地址。 
  40CH 字 計算機上2號並行打印機適配器的基地址。 
  40EH 字 計算機上3號並行打印機適配器的基地址。(PS2型此值爲擴展BIOS數據區段地址) 
  SetupAPI能夠獲得全部設備的信息包括IO端口,內存資源,中斷號碼
  222 更換桌面背景:
   方法一:
     看這裏:http://www.vckbase.com/vckbase/vckbase10/vc/nonctrls/atlcomocx_02 /1002001.htm,用了com中IActiveDesktop,這是個活動桌面的COM接口,還有智能指針,能夠順便學習一下這方面內容;
   方法二:
     SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, "c:\\aa.bmp", 1); //jpg圖片不行,沒法顯示
  223 讓多行風格的編輯框控件顯示指定行又一法:m_txt.LineScroll(m_txt.GetLineCount()); //m_txt爲CEdit控件綁定變量
  224 控制音量API:waveOutSetVolume
  225 在程序運行期間,怎樣禁止窗口右上方的關閉按鈕
   ---------------------------------------------------------------
   CMenu *pMenu = AfxGetMainWnd()->GetSystemMenu(FALSE) ;
   if (pMenu)
   pMenu->EnableMenuItem(SC_CLOSE, MF_BYCOMMAND|MF_GRAYED) ;
   // 變爲非禁止狀態
   CMenu *pMenu = AfxGetMainWnd()->GetSystemMenu(FALSE) ;
   if (pMenu)
   pMenu->EnableMenuItem(SC_CLOSE, MF_BYCOMMAND|MF_ENABLED) ;
   ---------------------------------------------------------------
  226  請問如何讓SDI程序啓動時自動隱藏:http://community.csdn.net/Expert/topic/4602 /4602225.xml?temp=.1871607
   http://blog.csdn.net/enoloo/archive/2004/06/07/17638.aspx //這個是要最大化的
   把pMainFrame->ShowWindow(SW_HIDE);這句加在ParseCommandLine(cmdInfo);的後面,if (!ProcessShellCommand(cmdInfo))的前面
  227 常常有人問有沒有高效的方法,能夠知道一個文本文件有多少行,抽空寫了幾行代碼回覆在貼子中:http://community.csdn.net/Expert/topic/4601 /4601972.xml?temp=.5953943
  228 精確的計時: <========================還沒試
  __int64 lfreq;
  BOOL bret=QueryPerformanceFrequency((LARGE_INTEGER*)&lfreq);
  __int64 lstart;
  QueryPerformanceCounter((LARGE_INTEGER*)&lstart);
  //... call your function
  __int64 lstop;
   QueryPerformanceCounter((LARGE_INTEGER*)&lstop);
  __int64 lruntime=lstop - lstart;
  double dsec= lruntime/lfreq;
   229 命令行處理的封裝類CCommandLineInfo和CCommandLineInfoEx
  230 操做臨時文件,臨時文件的使用方法基本與常規文件同樣,只是文件名應該調用函數GetTempFileName()得到。它的第一個參數是創建此臨時文件的路徑,第二個參數是創建臨時文件名的前綴,第四個參數用於獲得創建的臨時文件名:
   -----------------------------------------
   char szTempPath[_MAX_PATH],szTempfile[_MAX_PATH]; 
   GetTempPath(_MAX_PATH, szTempPath); 
   GetTempFileName(szTempPath,_T("my_"),0,szTempfile);
   -----------------------------------------
  231 彈出USB設備安全刪除對話框:WinExec("C:\\WINDOWS\\system32\\rundll32.exe shell32.dll,Control_RunDLL hotplug.dll",SW_SHOW);
  232 彈出「數據連接屬性」對話框:IDataSourceLocatorPtr::PromptNew();
  233 ActiveSkin 4.3 軟件換膚在VC中的實現:http://www.vckbase.com/document/viewdoc/?id=1288
  234  CBitmap=====>HBITMAP:
   -------------------------------------------------------------------------------------
   CBitmap bitmap;
   HBITMAP hbitmap=(HBITMAP)bitmap; //CBitmap中重載了HBITMAP()操做符,能夠方便地用它來強制轉換
   -------------------------------------------------------------------------------------
     HBITMAP=====>CBitmap:
   ---------------------------------------
   HBITMAP hbitmap;
   CBitmap bitmap;
   bitmap.FromHandle(hbitmap);
   ---------------------------------------
  235 從其它.exe文件提取.ico圖標做爲本身程序的圖標:
   ----------------------------------------------------------------------
   HINSTANCE hInst = LoadLibrary("b.exe");
   HRSRC hRc = FindResource(hInst, (LPCSTR)1, (LPCSTR)RT_ICON);
   LPVOID lpResource = LockResource(LoadResource(hInst,hRc));
  
   HANDLE hUpdate = BeginUpdateResource("a.exe", FALSE);
   UpdateResource(hUpdate, (LPCSTR)RT_ICON, (LPCSTR)1, 0, lpResource, SizeofResource(hInst, hRc));
   EndUpdateResource(hUpdate, FALSE);
  
   CloseHandle(hRc);
   FreeLibrary(hInst);
   -----------------------------------------------------------------------
  236 獲得當前屏幕的參數,最好是用函數EnumDisplaySettings(其它的方法如:GetSystemMetrics(SM_CYFULLSCREEN);會由於任務欄是否隱藏而可能得不到真實高度),這個函數功能強大,可根據指定的設備名(第一個參數)返回它的顯示信息:
   -------------------------------------------------------------------------------
   CString strCurrentDifferency,strCurrentColorMode; //分別用來存放屏幕當前分辨率、色彩位數的字符串
   LPDEVMODE gpCurrentMode = new DEVMODE; //用來存儲屏幕當前設置的結構指針
   EnumDisplaySettings(NULL, ENUM_CURRENT_SETTINGS, gpCurrentMode); //得到當前分辨率的大小和其它信息
   strCurrentDifferency.Format("分辨率:%d* %d",gpCurrentMode->dmPelsWidth,gpCurrentMode->dmPelsHeight);
   strCurrentColorMode.Format("當前顏色位數:%d",gpCurrentMode->dmDisplayFrequency);
   AfxMessageBox(strCurrentDifferency);
   AfxMessageBox(strCurrentColorMode);
   delete gpCurrentMode;
   gpCurrentMode=NULL;
   --------------------------------------------------------------------------------
   用CDC::GetDeviceCaps函數也能夠:
   -------------------------------------------------------------------------------------------------------
   CString strCurrentDifferency;
   CDC *pDC=CDC::FromHandle(::GetDC(0)); //隨便得到一個DC指針就能夠了,這裏是得到桌面的DC
   strCurrentDifferency.Format("分辨率:%d* %d",pDC->GetDeviceCaps(HORZRES),pDC->GetDeviceCaps(VERTRES));
   AfxMessageBox(strCurrentDifferency);
   -------------------------------------------------------------------------------------------------------
  237 組合框控件在Dropdown類型時,如何設置其爲只讀的:
   -----------------------------------------------------------------------------
   CComboBox *pCombo = (CComboBox*)GetDlgItem(IDC_COMBO1);
   HWND hEdit = ::FindWindowEx(pCombo->GetSafeHwnd(), NULL, _T("EDIT"), NULL);
   if (hEdit)
   ::SendMessage(hEdit, EM_SETREADONLY, TRUE, 0);
   -----------------------------------------------------------------------------
  238 解決這個工程出現重複編譯的錯誤:http://community.csdn.net/Expert/topic/4610 /4610652.xml?temp=.9251825
  239 偵測計算機是否連上網絡:InternetGetConnectedStateEx
  240 枚舉軟件或硬件設備:IMDServiceProvider::EnumDevices
  241 對話框中控件內容的打印:http://community.csdn.net/Expert/topic/4609/4609829.xml?temp=.1613275
     使你的dialog支持打印預覽:http://www.codeproject.com/printing/#Print+Preview 
     http://www.codeproject.com/listctrl/listprintdemo.asp
     如今沒有打印機可試,記在這裏先,之後有了再測試。
  242 結束其它的進程:GetWindowThreadProcessId和 TerminateProcess函數,不過TerminateProcess儘可能少用,它能夠直接結束目標進程,目標進程死都不知道是本身怎麼死的,來不及保存本身的數據結果,也來不及通知本身所調用的.dll文件不用給本身作晚飯了,固然也來不及打電話給它的子進程說:「阿珍,其實我一直都想對你說:我愛你!」
   這裏還有個貼子:http://community.csdn.net/Expert/topic/4608 /4608816.xml?temp=.9869654
  243 用LockFile函數鎖定一個打開文件的某一個區域,能夠防止其它進程訪問該區域。
  244 使CListCtrl控件的Item標籤能夠修改:ModifyStyle(0,LVS_EDITLABELS);
  245 如何動態的改變菜單項在狀態欄中的提示:http://community.csdn.net/Expert/topic/4615 /4615363.xml?temp=2.514064E-03
   重載CFrameWnd的virtual void GetMessageString(UINT nID, CString& rMessage) const;函數
  
   實現:
   --------------------------------------------------------------------------------
   void CMainFrame::GetMessageString(UINT nID, CString& rMessage) const
   {
   if(nID == ID_FILE_NEW) //這裏能夠動態改變
   {
   rMessage = "Create new file!";
   return;
   }
   CFrameWnd::GetMessageString(nID,rMessage); //調用默認的處理過程
   }
   --------------------------------------------------------------------------------
   對話框工程中:
  Handle the WM_MENUSELECT message. The wParam is the menu index, which is also the index of the stringtable entry that describes the menu. This prompting is ordinarily handled by the mainframe, but in a dialog-based app you have to add your own handler 
  246 修改.exe或其它模塊的資源,參考下面幾個函數:            <===========沒試過,不過看上去可行,用到時再試吧^_^
   LoadLibrary
   FindResource
   LoadResource
   LockResource
   BeginUpdateResource
   UpdateResource
   EndUpdateResource
   FreeResource
   具體見MSDN,上面同時給出了調用順序,看了參數就明白了
  247 請問NULL和 null,TRUE和true,FALSE和false等有啥區別?
   1.FALSE/TRUE與false/true的區別:
   false/true是標準C++語言裏新增的關鍵字,而FALSE/TRUE是經過#define,這要用途是解決程序在C與C++中環境的差別,如下是FALSE/TRUE在windef.h的定義:
   #ifndef FALSE
   #define FALSE 0
   #endif
   #ifndef TRUE
   #define TRUE 1
   #endif
   也就是說FALSE/TRUE是int類型,而false/true是bool類型;因此二者不同的,只不過咱們在使用中沒有這種感受,由於C++會幫你作隱式轉換。
   2.bool的大小與BOOL的區別:
   bool在C++裏是佔用1字節,而BOOL是int類型,int類型的大小是視具體環境而定的;因此來講:false/true只佔用1個字節,而 TRUE/FALSE視具體環境而言
  248 CFile::GetStatus也能夠得到文件的屬性信息
  249 獲取桌面全部頂級窗口:EnumDesktopWindows、EnumWindowsProc
  250 顯示用DirectShow捕捉下來的視頻:
   DirectShow的 IVideoWindow能夠設置
   ---------------------------------------------------------------------
   IVideoWindow *pVidWin = NULL;
   pGraph->QueryInterface(IID_IVideoWindow, (void **)&g_pVidWin);
   pVidWin->put_WindowStyle(WS_CHILD | WS_CLIPSIBLINGS);
   RECT grc;
   GetClientRect(hwnd, &grc);
   pVidWin->SetWindowPosition(0, 0, grc.right, grc.bottom);
   ---------------------------------------------------------------------
  251 改變編輯框控件中光標的圖形:
   ----------------------------------------------------------
   CBitmap* pBitmap = new CBitmap;
   pBitmap->LoadBitmap(IDB_HAPPY_BITMAP); //IDB_HAPPY_BITMAP爲工程中.bmp資源,大小任意,但顏色超過16色的話色彩會失真
   m_editCtrl.CreateCaret(pBitmap); //m_editCtrl爲編輯框控件變量
   POINT point;
   point.x=0;
   point.y=0;
   m_editCtrl.SetCaretPos(point); //改變光標的位置,以像素爲單位
   m_editCtrl.ShowCaret();
   ----------------------------------------------------------
  252 用主題函數改變對話框窗口的可視風格(MSDN上可查到更多這方面的函數):
   ----------------------------------------------------------------
   #include 
   #pragma comment(lib,"uxtheme.lib")
   void CMyDlg::OnTest() 
   {
   EnableThemeDialogTexture(m_hWnd,ETDT_ENABLE | ETDT_USETABTEXTURE);
   Invalidate();
   }
   ----------------------------------------------------------------
   253 如何讓MDI程序在啓動的時候不新建子窗口:http://community.csdn.net/Expert/topic/4619/4619802.xml?temp=.2809107
   在App的InitInstance中加一行:
   --------------------------------------------------------
   CCommandLineInfo cmdInfo;
   ParseCommandLine(cmdInfo);
   cmdInfo.m_nShellCommand=CCommandLineInfo::FileNothing; //添加這一句
   // Dispatch commands specified on the command line
   if (!ProcessShellCommand(cmdInfo))
   return FALSE;
   --------------------------------------------------------
  254 關機:ExitWindowsEx(EWX_SHUTDOWN or EWX_POWEROFF, 0 ) <=====還沒試
   強制關機ExitWindowsEx(EWX_FORCE or EWX_SHUTDOWN or EWX_POWEROFF, 0 );
  255 hook:http://community.csdn.net/Expert/topic /4615/4615606.xml?temp=.7596094
  256 字符串====>日期時間:
   -------------------------------------------------
   COleDateTime dt;
   dt.ParseDateTime(_T("2006-2-14 8:00:00"));
   SYSTEMTIME st={0};
   dt.GetAsSystemTime(st);
   //SetLocalTime(&st); //設置電腦中時間
   -------------------------------------------------
     日期時間====>字符串:
   -------------------------------------------------
   SYSTEMTIME st={0};
   st.wYear=2006;
   st.wMonth=3;
   st.wDay=23;
   st.wHour=8;
   st.wMinute=30;
   st.wSecond=59;
   COleDateTime dt(st);
   AfxMessageBox(dt.Format());
   -------------------------------------------------
  257 typeid函數能夠判斷一個對象的類型,詳見MSDN,上面有示例代碼,不過有點小問題:http://msdn.microsoft.com/library /default.asp?url=/library/en-us/vclang/html/_pluslang_typeid_operator.asp
  258 系統休眠,摘自:http://community.csdn.net/Expert/topic/4637 /4637403.xml?temp=.8914301
   ------------------------------------------------------------------------------------------------
   if(MessageBox("確實要休眠嗎?","關機程序",MB_YESNO|MB_DEFBUTTON2|MB_ICONQUESTION)==IDYES)
   {
   static HANDLE hToken;
   static TOKEN_PRIVILEGES tp;
   static LUID luid;
   if(::OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES|TOKEN_QUERY,&hToken))
   {
   ::LookupPrivilegeValue(NULL,SE_SHUTDOWN_NAME,&luid);
   tp.PrivilegeCount=1;
   tp.Privileges[0].Luid =luid;
   tp.Privileges[0].Attributes =SE_PRIVILEGE_ENABLED;
   ::AdjustTokenPrivileges(hToken,false,&tp,sizeof(TOKEN_PRIVILEGES),NULL,NULL);
   }
   ::SetSystemPowerState(false,true); 
   }
   -------------------------------------------------------------------------------------------------
  259 在錄音時如何控制錄音屬性中麥克風或者線路輸入的音量
   1.mixerGetNumDevs獲取混音設備數量 
   2.循環獲取設備信息mixerOpen/mixerGetLineInfo 
   3.根據得到的MIXERLINE中dwComponentType判斷類型來肯定是線入/麥克風 
   MIXERLINE_COMPONENTTYPE_SRC_LINE/MIXERLINE_COMPONENTTYPE_SRC_MICROPHONE 
   4.mixerSetControlDetails設置音量
  260 用資源管理器打開指定文件夾,並置目標文件夾爲選定狀態:WinExec("explorer /n,/select,f:\\win98", SW_SHOWNORMAL );
  261 打開或關閉輸入法:IActiveIME::SetActiveContext 
  262 提取.exe或.dll文件中的圖標:ExtractIcon
  263 捕捉其餘程序最大、最小化消息:http://community.csdn.net/Expert /topic/4647/4647630.xml?temp=.8477289
  264 WM_DEVICECHANGLE消息配合 DeviceIoControl函數可禁用U盤
  265 判斷編輯框控件是否爲只讀的:
   ----------------------------------------------------
   CEdit *temp=(CEdit *)GetDlgItem(IDC_EDIT1);
   DWORD a=temp->GetStyle();
   if(a & ES_READONLY) //ES_READONLY=0x800
   AfxMessageBox("Read only");
   else
   AfxMessageBox("NOT read only");
   ----------------------------------------------------
   266 得到系統電源狀態:
   GetSystemPowerStatus
  
   Retrieves the power status of the system. The status indicates whether the system is running on AC or DC power, whether the battery is currently charging, and how much battery life remains.
  267 桌面元素的操做:http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/shell/programmersguide/shell_adv/activedesktop.asp
  268 如何判斷是鍵盤左邊的Shift仍是右邊的Shift鍵,摘自:http://community.csdn.net/Expert/topic/4661/4661661.xml?temp=8.190554E-02
   http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/winui/windowsuserinterface/userinput/virtualkeycodes.asp
   上面URL中MSDN給出了全部按鍵的ASCII碼。
  
   VK_LSHIFT (A0)
   Left SHIFT key
  
   VK_RSHIFT (A1)
   Right SHIFT key
  269  C++開發經常使用工具:http://blog.vckbase.com/FlowSand/archive/2006/01/27/17447.html
  270 sprintf中打印百分號%的方法,摘自:http://blog.vckbase.com/smileonce/archive/2006/03/16/18521.html
   ------------------------------------------------------------
   int percent = 50;
   char buf[100];
   sprintf(buf, "%d%%%% complete\n! ", percent);
   printf(buf); //這樣就只打印一個%了
   printf("%s",buf); //改爲這樣後打印出兩個%了,恰如咱們指望的
   ------------------------------------------------------------
  271 精確延時,KeStallExecutionProcessor函數來幫你,摘自:http://blog.vckbase.com/zaboli/archive/2006/03/24/18705.html
  可是問題是KeStallExecutionProcessor的文檔說,他的最小週期不能大於 50微秒!否則會形成系統停頓。。
  測試得出 KeStallExecutionProcessor(416)在有的機器上會形成鼠標停頓 -_-可是KeDelayExecutionThread(KernelMode, FALSE, &WaitTime); 不管再怎麼設置小的超時,結果都以下10毫秒???差太多了吧。。。
  272 向控件發送鼠標滾輪的消息:
   ::SendMessage(m_cListCtrl.m_hWnd,WM_MOUSEWHEEL,(WPARAM)-7864320,0); //參數三是向下滾動的參數,7864320則爲向上滾動
  273 很多天前收到天影朋友的23種設計模式的例子,很淺顯易懂。下面的blog中亦有設計模式的探討,借古喻今,文筆不錯,可供參考:
   http://blog.csdn.net/junguo/
  274 得到文件夾大小的方法,摘自:http://community.csdn.net/Expert/topic/4672 /4672088.xml?temp=.2216761
   ----------------------------------------------------------------------------------
   #include 
   #import "scrrun.dll" raw_interfaces_only 
   int main()
   {
   CoInitialize(NULL);
   {
   try
   {
   Scripting::IFileSystem3Ptr fs;
   fs.CreateInstance(__uuidof(Scripting::FileSystemObject));
   Scripting::IFolderPtr folder;
   fs->GetFolder(_bstr_t("f:\\win98"),&folder);
   _variant_t vsize;folder->get_Size(&vsize);
   cout<<"f:\\win98 size:"<<(long)vsize<<" bytes"<
   }
   catch(_com_error &e)
   {
   _bstr_t bstrSource(e.Source());
   _bstr_t bstrDescription(e.Description());
   cout<<"Get directory size via FileSystemObject, by masterz"<
   cout<<"COM error occurred,source:"<<(LPCTSTR)bstrSource<
   cout<<"Description:"<<(LPCTSTR)bstrDescription<
   }
   }
   CoUninitialize();
   return 0;
   }
   ----------------------------------------------------------------------------------
  275 打開控制檯界面,寫點文字在上面:
   ----------------------------------------------------------------------------------
   AllocConsole();//打開控制檯窗口
   HANDLE hOutput=GetStdHandle(STD_OUTPUT_HANDLE);//獲得控制檯句柄
   unsigned long lgsize;
   char *strbuf="顯示這行信息。";
   WriteFile(hOutput,strbuf,strlen(strbuf),&lgsize,0);
   FreeConsole();//關閉釋放用於輸入新信息的控制檯窗口php

本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/sunyikuyu/archive/2010/06/27/5697250.aspxhtml

相關文章
相關標籤/搜索