009 windows程序小技巧20個

Post date: 2012/7/19 上午 06:35:36

http://topic.csdn.net/u/20080509/15/3bfad216-4644-440d-a540-fbcde4cb4405.html?seed=2001734980

一、打開CD-ROM

mciSendString("Set cdAudio door open wait",NULL,0,NULL);

二、關閉CD_ROM

mciSendString("Set cdAudio door closed wait",NULL,0,NULL);

三、關閉計算機

OSVERSIONINFO OsVersionInfo; //包含操作系統版本信息的數據結構

OsVersionInfo.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);

GetVersionEx(&OsVersionInfo); //獲取操作系統版本信息

if(OsVersionInfo.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS)

{

//Windows98,調用ExitWindowsEx()函數重新啟動計算機

DWORD dwReserved;

ExitWindowsEx(EWX_REBOOT,dwReserved); //可以改變第一個參數,實現註銷用戶、

//關機、關閉電源等操作

// 退出前的一些處理程序

}

四、重啟計算機

typedef int (CALLBACK *SHUTDOWNDLG)(int); //顯示關機對話框函數的指針

HINSTANCE hInst = LoadLibrary("shell32.dll"); //裝入shell32.dll

SHUTDOWNDLG ShutDownDialog; //指向shell32.dll庫中顯示關機對話框函數的指針

if(hInst != NULL)

{

//獲得函數的地址並調用之

ShutDownDialog = (SHUTDOWNDLG)GetProcAddress(hInst,(LPSTR)60);

(*ShutDownDialog)(0);

}

五、枚舉所有字體

LOGFONT lf;

lf.lfCharSet = DEFAULT_CHARSET; // Initialize the LOGFONT structure

strcpy(lf.lfFaceName,"");

CClientDC dc (this);

//Enumerate the font families

::EnumFontFamiliesEx((HDC) dc,&lf,

(FONTENUMPROC) EnumFontFamProc,(LPARAM) this,0);

//枚舉函數

int CALLBACK EnumFontFamProc(LPENUMLOGFONT lpelf,LPNEWTEXTMETRIC lpntm,DWORD nFontType,long lparam)

{

// Create a pointer to the dialog window

CDay7Dlg* pWnd = (CDay7Dlg*) lparam;

// add the font name to the list box

pWnd ->m_ctlFontList.AddString(lpelf ->elfLogFont.lfFaceName);

// Return 1 to continue font enumeration

return 1;

}

其中m_ctlFontList是一個列表控件變量

六、一次只運行一個程序實例,如果已運行則退出

if( FindWindow(NULL,"程序標題")) exit(0);

七、得到當前鼠標所在位置

CPoint pt;

GetCursorPos(&pt); //得到位置

八、上下文菜單事件觸發事件:OnContextMenu事件

九、顯示和隱藏程序菜單

CWnd *pWnd=AfxGetMainWnd();

if(b_m) //隱藏菜單

{

pWnd->SetMenu(NULL);

pWnd->DrawMenuBar();

b_m=false;

}

else

{

CMenu menu;

menu.LoadMenu(IDR_MAINFRAME); ////顯示菜單 也可改變菜單項

pWnd->SetMenu(&menu);

pWnd->DrawMenuBar();

b_m=true;

menu.Detach();

}

十、獲取可執行文件的圖標

HICON hIcon=::ExtractIcon(AfxGetInstanceHandle(),_T("NotePad.exe"),0);

if (hIcon &&hIcon!=(HICON)-1)

{

pDC->DrawIcon(10,10,hIcon);

}

DestroyIcon(hIcon);

十一、窗口自動靠邊程序演示

BOOL AdjustPos(CRect* lpRect)

{

//自動靠邊

int iSX=GetSystemMetrics(SM_CXFULLSCREEN);

int iSY=GetSystemMetrics(SM_CYFULLSCREEN);

RECT rWorkArea;

BOOL bResult = SystemParametersInfo(SPI_GETWORKAREA, sizeof(RECT), &rWorkArea, 0);

CRect rcWA;

if(!bResult)

{

//如果調用不成功就利用GetSystemMetrics獲取屏幕面積

rcWA=CRect(0,0,iSX,iSY);

}

else

rcWA=rWorkArea;

int iX=lpRect->left;

int iY=lpRect->top;

if(iX < rcWA.left + DETASTEP && iX!=rcWA.left)

{

//調整左

//pWnd->SetWindowPos(NULL,rcWA.left,iY,0,0,SWP_NOSIZE);

lpRect->OffsetRect(rcWA.left-iX,0);

AdjustPos(lpRect);

return TRUE;

}

if(iY < rcWA.top + DETASTEP && iY!=rcWA.top)

{

//調整上

//pWnd->SetWindowPos(NULL ,iX,rcWA.top,0,0,SWP_NOSIZE);

lpRect->OffsetRect(0,rcWA.top-iY);

AdjustPos(lpRect);

return TRUE;

}

if(iX + lpRect->Width() > rcWA.right - DETASTEP && iX !=rcWA.right-lpRect->Width())

{

//調整右

//pWnd->SetWindowPos(NULL ,rcWA.right-rcW.Width(),iY,0,0,SWP_NOSIZE);

lpRect->OffsetRect(rcWA.right-lpRect->right,0);

AdjustPos(lpRect);

return TRUE;

}

if(iY + lpRect->Height() > rcWA.bottom - DETASTEP && iY !=rcWA.bottom-lpRect->Height())

{

//調整下

//pWnd->SetWindowPos(NULL ,iX,rcWA.bottom-rcW.Height(),0,0,SWP_NOSIZE);

lpRect->OffsetRect(0,rcWA.bottom-lpRect->bottom);

return TRUE;

}

return FALSE;

}

//然後在ONMOVEING事件中使用所下過程調用

CRect r=*pRect;

AdjustPos(&r);

*pRect=(RECT)r;

十二、給系統菜單添加一個菜單項

給系統菜單添加一個菜單項需要進行下述三個步驟:

首先,使用Resource Symbols對話(在View菜單中選擇Resource Symbols...可以顯示該對話)定義菜單項ID,該ID應大於

0x0F而小於0xF000;

其次,調用CWnd::GetSystemMenu獲取系統菜單的指針並調用CWnd:: Appendmenu將菜單項添加到菜單中。下例給系統菜單添加

兩個新的菜單項。

int CMainFrame:: OnCreate (LPCREATESTRUCT lpCreateStruct)

{

//Make sure system menu item is in the right range.

ASSERT(IDM_MYSYSITEM <0xF000);

//Get pointer to system menu.

CMenu* pSysMenu=GetSystemMenu(FALSE);

ASSERT_VALID(pSysMenu);

//Add a separator and our menu item to system menu.

CString StrMenuItem(_T ("New menu item"));

pSysMenu->AppendMenu(MF_SEPARATOR);

pSysMenu->AppendMenu(MF_STRING, IDM_MYSYSITEM, StrMenuItem);

}

13、運行其它程序

//運行EMAIL或網址

char szMailAddress[80];

strcpy(szMailAddress,"mailto:netvc@21cn.com");

ShellExecute(NULL, "open", szMailAddress, NULL, NULL, SW_SHOWNORMAL);

//2、運行可執行程序

WinExec("notepad.exe",SW_SHOW); //運行計事本

14、動態增加或刪除菜單

(1)、 增加菜單

//添加

CMenu *mainmenu;

mainmenu=AfxGetMainWnd()->GetMenu(); //得到主菜單

(mainmenu->GetSubMenu (0))->AppendMenu (MF_SEPARATOR);//添加分隔符

(mainmenu->GetSubMenu (0))->AppendMenu(MF_STRING,ID_APP_ABOUT,_T("Always on &Top")); //添加新的菜單項

DrawMenuBar(); //重畫菜單

(2)、 刪除菜單

//刪除

CMenu *mainmenu;

mainmenu=AfxGetMainWnd()->GetMenu(); //得到主菜單

CString str ;

for(int i=(mainmenu->GetSubMenu (0))->GetMenuItemCount()-1;i>=0;i--) //取得菜單的項數。

{

(mainmenu->GetSubMenu (0))->GetMenuString(i,str,MF_BYPOSITION);

//將指定菜單項的標籤拷貝到指定的緩衝區。MF_BYPOSITION的解釋見上。

if(str=="Always on &Top") //如果是剛才我們增加的菜單項,則刪除。

{

(mainmenu->GetSubMenu (0))->DeleteMenu(i,MF_BYPOSITION);

break;

}

}

15、測試ALT鍵是否按下:

GetKeyState(VK_MENU);

GetAlt();

16、檢查是否按下鼠標左鍵

if((nFlags&MK_LBUTTON)==MK_LBUTTON)

17、檢查鍵盤輸入

在OnKeyDown中的參數nChar是一個數值,當顯示的時候,需要轉換成字符,使用如下的命令:

char lsChar;

lsChar=char(nChar);

if(lsChar=='A');

{

.......

}

18、調用另一個函數::GetKeyState(),用一個特定的鍵代碼來確定法鍵是否被按下。如果::GetKeyState函數的返回值是負的,表示該鍵被按下。如果返回值是非負的,表示該留未被按下。例如:如果要確定shift鍵是否被按下,可以使用下面的代碼:

if(::GetKeyState(VK_SHIFT) <O)

{

AfxMessageBox("shift is pressed");

}

19.如何在編程的過程中隨時結束應用程序(常規)

1)需要向窗口發送 WM_CLOSE/WM_QUIT消息,

調用 CWnd::OnClose成員函數並允許對用戶提示是否保存修改過的數據.

AfxGetMainWnd()->SendMessage(WM_CLOSE); //別忘了先得到當前窗口的指針

2)使用函數: void PostQuitMessage( int nExitCode // exit code );

3)使用標準函數:void exit( int status ); //盡量不要在MFC中使用

20.得到屏幕的尺寸大小

HWND hWnd;

CRect Rect;

hWnd = ::GetDesktopWindow();

::GetClientRect(hWnd, &Rect);

//---------------------------------------------------------

如何查詢和設置系統參數

在Windows 3.1 SDK中介紹過SDK函數SystemParametersInfo,調用該函數可以查詢和設置系統參數,諸如按鍵的重複速率設置、鼠標雙擊延遲時間、圖標字體以及桌面覆蓋位圖等等。

//Create a font that is used for icon titles.

LOGFONT stFont; :: SystemParametersInfo (SPIF_GETICONTITLELOGFONT, sizeof (LOGFONT), &stFont, SPIF_SENDWININICHANGE);

m_font.CreateFontIndirect (&stFont); //Change the wallpaper to leaves.bmp.

:: SystemParametersInfo (SPI_SETDESKWALLPAPER, 0, _T("forest.bmp"),SPIF_UPDATEINIFILE);

//---------------------------------------------------------

如何使用一個預定義的Windows光標

調用CWinApp:: LoadStandardCursor並傳送光標標識符。

BOOL CSampleDialog:: OnSetCursor (CWnd* pWnd, UINT nHitTest, UINT message) { //Display wait cursor if busy.

if (m_bBusy) {

SetCursor (AfxGetApp () ->LoadStandardCursor (IDC_WAIT));

return TRUE; }

return CDialog:: OnSetCursor (pWnd. nHitTest,message); }

//////////////////////////////////////////////////////////////////////////////////////////////////

來源:http://blog.csdn.net/Blue_Dream_/archive/2007/12/12/1931609.aspx

1.

直接加載外部 bmp, ico, cur

CXXX::OnPaint()

{

CPaintDC dc(this);

CDC dcMem;

CBitmap Bitmap ;

HBITMAP hBitmap ;

CRect rect ;

GetClientRect( &rect ) ;

// 加載外部文件

hBitmap = (HBITMAP)::LoadImage(0, _T("D:\test.bmp"), IMAGE_BITMAP, 0, 0

, LR_LOADFROMFILE);

if ( hBitmap == NULL )

return ;

Bitmap.Attach( hBitmap );

// 把位圖選入內存描述表

dcMem.CreateCompatibleDC( &dc ) ;

dcMem.SelectObject( & Bitmap );

// 顯示位圖

// dcMem

dc.BitBlt( 0, 0, rect.Width(), rect.Height(), &dcMem, 0, 0, SRCCOPY );

}

限定對話框的大小

添加 WM_SIZING 的響應函數:

void CYourDialog::OnSizing(UINT fwSide, LPRECT pRect)

{

// 寬度限定在 200

if( pRect->right - pRect->left <= 200 )

pRect->right = pRect->left;

// 高度限定在 200

if(pRect->bottom - pRect->top <=200)

pRect->bottom = pRect->top + 200;

CDialog::OnSizing(fwSide, pRect);

}

刪除多個 CListCtrl 中選定項

void Delete_SelectedItem( CListCtrl & m_CtrlMulicList )

{

POSITION pos ;

CDWordArray dwArray ;

int Item ;

pos = m_CtrlMulicList.GetFirstSelectedItemPosition() ;

if ( NULL == pos )

{

return ;

}

//

// 把將要刪除元素的索引存放在數組中,我們在刪除列表元素時必須:從後向前刪(每刪除一個元素, 該元素後//的item 自動減 1,是變化的。我們從後向前刪,不會影響前面要刪除的元素)

//

while ( pos != NULL )

{

Item = m_CtrlMulicList.GetNextSelectedItem( pos );

dwArray.Add( Item );

}

// 先刪除索引大的元素, 再刪除索引小的元素

for ( int i= dwArray.GetCount() -1 ; i >= 0 ; i-- )

{

m_CtrlMulicList.DeleteItem( dwArray[i] );

}

}

2.

1 在VC下執行DOS命令

 a. system("md c:");

 b. WinExec("Cmd.exe /C md c:", 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,&pi))

{

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;

}

2. 刪除目錄,包含刪除子文件夾以及其中的內容

-------------------------------------------------

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;

}

讓程序暫停:system("PAUSE");

在PreTranslateMessage中捕捉鍵盤事件

if (pMsg->message==WM_KEYDOWN && pMsg->wParam==VK_RETURN)

return TRUE; // 注意return的值

更改按鍵消息( 下面的代碼可把回車鍵消息改為TAB鍵消息 )

-------------------------------------------------------

BOOL CT3Dlg::PreTranslateMessage(MSG* pMsg)

{

if(pMsg->message == WM_KEYDOWN && VK_RETURN == pMsg->wParam)

{

pMsg->wParam = VK_TAB;

}

return CDialog::PreTranslateMessage(pMsg);

}

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);

EDIT控件的 EM_SETSEL,EM_REPLACESEL消息

在其它進程中監視鍵盤消息:用SetWindowsHookEx(WH_KEYBOARD_LL,...);

在桌面上任意位置寫字

--------------------------------------------------

HDC deskdc = ::GetDC(0);

CString stext = "我的桌面";

::TextOut(deskdc,100,200,stext,stext.GetLength());

::ReleaseDC(0,deskdc);

HWND thread_hwnd=Findwindow(NULL,"你要監控的進程窗體(用SPY++看)"),

if (thread_hwnd==NULL) 。。。。。。。。。。

else DWORD thread_id=GetWindowThreadProcessId(thread_hwnd,NULL)

waveOutGetVolume() 可以得到波形音量大小

隱藏桌面圖標並禁用右鍵功能菜單:

------------------------------------

HWND Hwd = ::FindWindow("Progman", NULL);

if (bShowed)

::ShowWindow(Hwd, SW_HIDE);

else

::ShowWindow(Hwd, SW_SHOW);

bShowed = !bShowed;

我的程序是當前運行的程序時,可以用 setcursor()來設置光標的圖標。

而且可以用setcapture()是鼠標移動到我得程序窗口之外時也是我設置的圖標

但是如果我得程序不是當前的運行程序的,鼠標就會變會默認的。

怎樣能夠,使得不變回默認的,還是用我設置的光標?

SetSystemCursor

SendMessage函數的幾個用法:

控制按鈕按下的,是這麼用的

SendMessage(n1, WM_COMMAND, MAKELPARAM(ID,BN_CLICKED),(LPARAM )n2); (n1,n2是句柄)

而得到文本內容,是這樣用的,

SendMessage(hWnd,WM_GETTEXT,10,(LPARAM)buf),

處理一個單行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

設備發生改變處理函數可在CWnd::OnDeviceChange中,捕獲WMDEVICECHANGE事件不能區分諸如設備插入、拔下消息。

SHGetFileInfo 函數可獲得文件信息。

VC中對聲音文件的操作:http://www.pujiwang.com/twice/Article_Print.asp?ArticleID=550

讀取文本文件中的一行:用CFile類的派生類:CStdioFile的方法:CStdioFile::ReadString

任務欄上的圖標閃爍:

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()//閃爍多次

在一個由漢字組成的字符串裡,由於一個漢字由兩個字節組成,怎樣判斷其中一個字節是漢字的第一個字節,還是第二個字節,使用IsDBCSLeadByte函數能夠判斷一個字符是否是雙字的第一個字節,試試看:)

_ismbslead

_ismbstrail

如何實現對話框面板上的控件隨著對話框大小變化自動調整

在OnSize中依其比例用MoveWindow同等縮放.http://www.codeproject.com/dialog/dlgresizearticle.asp

向CListCtrl中插入數據後,它總是先縱向再橫向顯示,我希望他先橫向再縱向

在CListCtrl的ReDraw()中處理(見http://community.csdn.net/Expert/topic/4383/4383963.xml?temp=.3442041)

如:

m_list.ReDraw(FALSE);

m_list.ReDraw(TRUE);

如何設置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/

如何得到窗口標題欄尺寸: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;

怎樣查找到正處在鼠標下面的窗口(具體到子窗口和菜單),無論是這個窗口是否具有焦點:

POINT pt;

CWnd* hWnd; // Find out which window owns the cursor

GetCursorPos(&pt);

hWnd=CWnd::WindowFromPoint(pt);

if(hWnd==this)

{

//鼠標在窗體中空白處,即不在任何控件或子窗口當中

}

得到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;

}

如何在clistctrl的單元格裡添加圖片?http://community.csdn.net/Expert/topic/4388/4388748.xml?temp=.2233393

自己處理按鍵響應函數:

-------------------------------------------------

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);

}

如何在VC中操縱word:http://www.vckbase.com/document/viewdoc/?id=1174

兩個像素(用RGB表示)如何確定亮度等級:

加權算出灰度值:R*0.21+Green*0.70+Blue*0.09,或:

((紅色值 X 299) + (綠色值 X 587) + (藍色值 X 114)) / 1000

自己寫了個函數,用來獲得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;

}

刪除非空文件夾:

------------------------------------------------

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);

有關控件的一些常見問答:

http://fxstudio.nease.net/article/ocx/ <==========================很不錯的地方哦

用VC++6.0實現PC機與單片機之間串行通信

http://www.zahui.com/html/1/1710.htm

刷新屏幕局部:

刷新控件區域:

控件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

在標題欄上畫圖:http://community.csdn.net/Expert/topic/4416/4416434.xml?temp=.8910944

如何精確延時:http://www.vckbase.com/document/viewdoc/?id=1301

怎樣給TreeView控件中的結點重命名:http://community.csdn.net/Expert/topic/4409/4409069.xml?temp=.1730463

從內存中加載並啟動一個exe :http://community.csdn.net/Expert/topic/4418/4418306.xml?temp=.7619135

在程序中使用console窗口顯示:http://www.codeguru.com/Cpp/W-D/console/

在裡面找一下:Redirection

改變編輯框字體的大小:http://community.csdn.net/Expert/topic/4389/4389148.xml?temp=.2317163

先在對話框類的內部聲明一個CFont對象,如:CFont myfont;

---------------------------------

myfont.CreatePointFont(500, "Arial");

GetDlgItem(IDC_EDIT1)->SetFont(&myfont);

bmp圖片怎麼轉換為jpg:

用cximage

www.codeproject.com上有

快速從數字的字符串中提取出特定長度的數字:

-------------------------------------------------------

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

如何改變CListCtrl包括Scrollbars和Column Headers的顏色和風格:http://www.codeguru.com/Cpp/controls/listview/backgroundcolorandimage/print.php/c4185/

根據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);

彈出U盤:http://community.csdn.net/Expert/topic/4432/4432968.xml?temp=.8724634

往另一個程序的編輯框中發送文字:句柄->SendMessage(WM_SETTEXT,strlen(buf),(LPARAM)buf); //buf為你要加入的char*

如何在RichEdit中加超鏈接:http://community.csdn.net/Expert/topic/4434/4434686.xml?temp=9.524173E-02

VC控件的用法:http://www.vckbase.com/document/indexold.html

學習資源:http://code.ddvip.net/list/sort000081_1.html

一個基於SDK的軟鍵盤的範例,可以學習如何發送虛擬按鍵或鼠標消息:http://www.codeproject.com/cpp/togglekeys.asp

快速從得到的全路徑文件名中分離出盤符、路徑名、文件名和後綴名:

------------------------------------------------

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); //用這個函數轉換

如何debug除零錯誤:http://community.csdn.net/Expert/topic/4440/4440273.xml?temp=.2427484

修改VS.net「工具」欄中菜單的默認圖標:http://www.codeproject.com/dotnet/vsnet_addin_icon_change.asp

在窗口的標題欄和菜單欄上象realplayer那樣添加自己的logo:http://www.codeproject.com/menu/menuicon.asp

個性化的位圖菜單,自己從CMenu派生子類實現:http://www.codeguru.com/Cpp/controls/menu/bitmappedmenus/article.php/c165

 http://www.codeguru.com/Cpp/controls/menu/bitmappedmenus/article.php/c163

怎樣取得程序自己佔用的內存和CPU佔用率:GetProcessMemoryInfo和GetPerformanceInfo

如何讓你的程序運行在release模式下:build->set active configuration

監視文件夾是否被更新:FindFirstChangeNotification、FindNextChangeNotification、FindCloseChangeNotification這三個函數

範例見:http://msdn.microsoft.com/library/default.asp?url=/library/en-us/fileio/fs/obtaining_directory_change_notifications.asp

動態菜單:http://community.csdn.net/Expert/topic/4441/4441893.xml?temp=.2887384

 http://community.csdn.net/Expert/topic/4506/4506791.xml?temp=.2409326

如何獲取客戶區的中心坐標:http://community.csdn.net/Expert/topic/4449/4449444.xml?temp=8.642215E-02

強行操作內存虛擬地址中某個指定地方的內容:

----------------------------------------------

int *a=(int*)0x00440000; //這裡以訪問0x00440000地址為例

cout < <*a < ----------------------------------------------

如何響應條碼機: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框為好。

3.

檢查指定文件夾是否存在: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.