VC小技巧(网上搜的)
生活随笔
收集整理的這篇文章主要介紹了
VC小技巧(网上搜的)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一、打開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,"[email=mailto:netvc@21cn.com]netvc@21cn.com[/email]");?
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);??}??
?
?
?
對我有用[7]?丟個板磚[0]?引用?舉報?管理?TOP?回復次數:350??
?
bubu8633
?
(流浪的布布-往來隨風?散若煙塵)?
等?級:?
?#1樓?得分:1回復于:2008-05-09?15:12:09不錯?,值得收藏?:)??
?
?
對我有用[0]?丟個板磚[0]?引用?舉報?管理?TOP?精華推薦:exe運行后怎樣刪除自身?
?
akirya
?
(壞)?
等?級:?
更多勛章?#2樓?得分:1回復于:2008-05-09?15:12:09UP?
不少?
?
?
對我有用[0]?丟個板磚[0]?引用?舉報?管理?TOP?精華推薦:語言學習回憶錄(-)?
?
bubu8633
?
(流浪的布布-往來隨風?散若煙塵)?
等?級:?
?#3樓?得分:0回復于:2008-05-09?15:12:492008-05-09?15:12:09?
哈哈?
?
?
對我有用[0]?丟個板磚[0]?引用?舉報?管理?TOP?精華推薦:多線程同步問題?
?
baihacker
?
(飛雪)?
等?級:?
4
3
?#4樓?得分:1回復于:2008-05-09?15:13:03來源: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?);?
}?
}?
2.?
1?在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,&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)?
{?
//鼠標在窗體中空白處,即不在任何控件或子窗口當中?
}?
?
?
?
對我有用[1]?丟個板磚[0]?引用?舉報?管理?TOP?精華推薦:迅雷筆試題,歡迎挑戰。?
?
NKLoveRene
?
(容我想想)?
等?級:?
?#5樓?得分:1回復于:2008-05-09?15:14:38很長。。。?
?
?
對我有用[0]?丟個板磚[0]?引用?舉報?管理?TOP?精華推薦:const?char*?str="abcd"?與?char*?str="abcd"有區別嗎??
?
baihacker
?
(飛雪)?
等?級:?
4
3
?#6樓?得分:0回復于:2008-05-09?15:14:47得到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.?
?
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,"[email=mailto:netvc@21cn.com]netvc@21cn.com[/email]");?
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);??}??
?
?
?
對我有用[7]?丟個板磚[0]?引用?舉報?管理?TOP?回復次數:350??
?
bubu8633
?
(流浪的布布-往來隨風?散若煙塵)?
等?級:?
?#1樓?得分:1回復于:2008-05-09?15:12:09不錯?,值得收藏?:)??
?
?
對我有用[0]?丟個板磚[0]?引用?舉報?管理?TOP?精華推薦:exe運行后怎樣刪除自身?
?
akirya
?
(壞)?
等?級:?
更多勛章?#2樓?得分:1回復于:2008-05-09?15:12:09UP?
不少?
?
?
對我有用[0]?丟個板磚[0]?引用?舉報?管理?TOP?精華推薦:語言學習回憶錄(-)?
?
bubu8633
?
(流浪的布布-往來隨風?散若煙塵)?
等?級:?
?#3樓?得分:0回復于:2008-05-09?15:12:492008-05-09?15:12:09?
哈哈?
?
?
對我有用[0]?丟個板磚[0]?引用?舉報?管理?TOP?精華推薦:多線程同步問題?
?
baihacker
?
(飛雪)?
等?級:?
4
3
?#4樓?得分:1回復于:2008-05-09?15:13:03來源: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?);?
}?
}?
2.?
1?在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,&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)?
{?
//鼠標在窗體中空白處,即不在任何控件或子窗口當中?
}?
?
?
?
對我有用[1]?丟個板磚[0]?引用?舉報?管理?TOP?精華推薦:迅雷筆試題,歡迎挑戰。?
?
NKLoveRene
?
(容我想想)?
等?級:?
?#5樓?得分:1回復于:2008-05-09?15:14:38很長。。。?
?
?
對我有用[0]?丟個板磚[0]?引用?舉報?管理?TOP?精華推薦:const?char*?str="abcd"?與?char*?str="abcd"有區別嗎??
?
baihacker
?
(飛雪)?
等?級:?
4
3
?#6樓?得分:0回復于:2008-05-09?15:14:47得到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.?
?
轉載于:https://www.cnblogs.com/zzzili/archive/2012/12/06/6662838.html
總結
以上是生活随笔為你收集整理的VC小技巧(网上搜的)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Map 遍历取值及jstl的取值
- 下一篇: C++中STL的一些用法的补充