VC++常用功能程式碼
1. 如何獲取系統日期
CTime tm = CTime :: GetCurrentTime();
CString strTime = tm.Format(_TEXT(“%Y-%M-%d %H:%M:%S));
MessageBox(strTime);
2. 動態分配二維陣列
int **array;
array = new int*[col];
if(array = = 0) exit(-1);
for(int i=0; i<col; i++){
array[i] = new int[row];
if(array[i] = = 0)
exit(-1); }
//釋放
for(i=0; i<col; i++){
delete [] array[i]; }
delete [] array;
3. 如何定義一個二維字串陣列
① char **str = “abcdef” ; //一維
② char *str[row][col]={“abc”, “cdf”, “efg”…..}; //row×col個
4. 將一個十六進位制”FF”、”FA”等字串陣列等轉化為十進位制陣列
int array[32][32];
int a,b, n=0;
int result1;
char *str;
for(int i=0; i<32; i++)
for(int j=0; j<32; j++){
str = str[i][j];
if(str[0] >= ‘A’ && str[1] >=’A’){ //”AF”
a = str[0] – ‘A’;
b= str[1] – ‘A’;
result1 = (a+10)*16+(b+10)*1;}
else if(str[0] >= ‘A’ && str[1] <’A’){ //”A9”
a = str[0] – ‘A’;
b = ‘A’ – str[1] +1;
result1 = (a+10)*16+b;}
else if(str[0] < ‘A’ && str[1] >=’A’){ //”8B”
a = ‘A’ – str[0]+1;
b = str[1] – ‘A’;
result1 = a*16+(b+10)*1;}
else{ //”87”
a = ‘A’ – str[0]+1;
b = ‘A’ – str[1] +1;
result1 = a*16+b;}
array[i][j] = reslut1;
printf(“%5d”, array[i][j]);
n++;
if(n%32 = = 0) printf(“\n”); }
將這個矩陣陣列在螢幕上顯示:
#i nclude < afxwin.h >
#i nclude < afxext.h >
#i nclude < afxdisp.h >
#i nclude < afxdtctl.h >
DWORD color_;
HDC hMyDC = GetDC(NULL);
for(i=0; i<32; i++)
for(j=0; j<32; j++){
color_ = array[i][j];
color_ = color_*256*256 + color_*256+color_;
SetPixel(hMyDC, j, i, color_); }
5. 將一個整型轉化為一個字串 _itoa
//將從點陣圖資訊頭得到的影像寬度和高度顯示出來
char buffer1[20], buffer2[20];
_itoa( width, buffer1, 10);
_itoa( height, buffer2, 10);
char str[80];
strcpy(str, “width=”);
strcat(str, buffer1);
strcat(str, “, hight=”;
strcat(str, buffer2);
AfxMesageBox(str, MB_OK, 0);
6. 當把二維陣列地址用作引數傳遞,而又要此地址不斷遞增時,可以另外定義一個同型別指標,指向二維陣列第一個元素的地址,把這個賦值放在迴圈外:
unsigned char *p;
p = &m_pImage[0][0];
然後在迴圈中,可以p + m_count*4096;
7. 改變最近開啟文件的個數
在InitInstance()中的LoadStdProfileSetting(8); //括號裡是要設定的個數
8. 開啟調色盤對話方塊
CColorDialog dlg;
dlg.Domodal();
9. 如何新增工具欄,如何使用Slider?
在OnInitDialog()中新增:
CSliderCtrl *pSliderCtrl=(CSliderCtrl*)GetDlgItem(IDC_SLIDER1);
pSliderCtrl -> SetRange(0,255,TRUE); //設定滑動條的範圍
pSliderCtrl -> SetPos(100); // 設定滑動條的初始位置
在Dlg類中響應WM_HSCROLL訊息:
CSliderCtrl *pSliderCtrl=(CSliderCtrl*)GetDlgItem(IDC_SLIDER1);
m_nCur = pSliderCtrl - >GetPos(); //獲得當前的位置值
10. 更改游標
:: SetCursor(:: LoadCursor(NULL, IDC_SIZEALL));
//如果是自己定義的游標資源,則要用MAKEINTRESOURCE 進行轉化,例如:
:: SetCursor(:: LoadCursor(NULL, IDC_CURSOR_CUT));
11. 設定文字顯示的一些函式
CDC dc(this);
CPen pen(PS_SOLID, 2, RGB(0,0,255)); //初始化一支筆
CBrush *pBush = CBrush :: FromHandle((HBRUSH)GetStockObject(NULL_BRUSH));
dc.SelectObject(pBrush);
dc.SetTextColor(RGB(255,0 ,255));
dc.SetBKMode(TRANSPARENT); //將文字背景設定為透明
12. 將對話方塊中的影像拷貝到剪貼簿
CWnd* pWnd = GetDlgItem(IDC_IMAGE_SELECT);
WINDOWPLACEMENT *winPlacement;
WinPlacement = new WINDOWPLACEMENT;
pWnd -> GetWindowPlacement(winPlacement); //獲得一個控制元件的位置
CDC *dcTemp;
dcTemp= new CClientDC(FromHandle(m_hWnd));
CDC memDC;
memDC.CreateCompatibleDC(dcTemp); //建立一個相容的DC
CBitmap bm;
CSize sz(lWidth, lHeight);
bm.CreateCompatilbleBitmap(dcTemp, sz.cx, sz.cy); //建立一個相容的點陣圖
CBitmap* oldbm = memDC.SelectObject(&bm);
memDC.BitBlt(0, 0, sz.cx, sz.cy, dcTemp, winPlacement ->rcNormalPosition.left,
winPlacement ->rcNormalPosition.top, SRCCOPY);
pWnd -> OpenClipboard(); //開啟剪貼簿,不用pWnd->GetParent()->OpenClipard();
:: EmptyClipard();
:: SetClipardData(CF_BITMAP, bm.m_hObject); //貼上到剪貼簿
CloseClipard();
memDC.SelcetObject(oldbm);
delete dcTemp;
13. VC裡獲取一個資料夾路徑
BROWSEINFO bi;
TCHAR szDisplayName[MAX_PATH];
LPITEMIDLIST pidl;
LPMALLOC pMalloc = NULL;
ZeroMemory(&bi, sizeof(bi));
bi.hWndOwner = GetSafeHwnd();
bih.pszDisplayName = szDisplayName;
bi.lpszTitle = TEXT(“Please select a folder:”);
bi.ulFlags = BIF_RETURNONLYFSDIRS;
Pidl = SHBrowseForFolder(&bi);
if(pidl) {
SHGetPathFromIDList(pidl, szDisplayName);
sPath = szDisplayName;
MessageBox(sPath); }
14. 如何設定密碼輸入時顯示的是*號
#i nclude <iostream.h>
#i nclude <conio.h>
char a[8];
void main() {
int i=0;
Cout<<”請輸入密碼:”<<endl;
while(1) {
a[i] = getch();
if( i>=8 || a[i]= = 13)
break;
putch(‘*’);
i++; }
cout<<endl<<a<<endl;
getch(); }
15. 設定選單:可以使用CMenu:: EnableMenuItem()來設定選單可用或禁用,但是在MFC中,要使該函式起作用,需要將CWnd :: m_bAutomenuEnable設定為FALSE.
16. 關閉子視窗
:: SendMessage(:: AfxGetMainWnd() -> m_hWnd, WM_COMMAND, ID_FILE_CLOSE,0);
獲取主視窗的指標 CWinThread :: m_pMainWnd
呼叫AfxGetMainWnd()可實現
CMain* pApp = ((CMain*)AfxGetApp()->m_pMainWnd);
ASSERT_KINDOF(CMain, pAPP); //確保pAPP是CMain的類物件
2. VC++如何獲取應用程式的例項控制程式碼
例項控制程式碼儲存在CWinApp m_hInstance中
HANDLE hInstance = AfxGetInstanceHandle();
3. VC++怎樣載入其他的應用程式 三個SDK函式WinExec, ShellExecute, CreateProcess.
① WinExec最簡單,前一個指定路徑,後一個指定顯示方式;
② ShellExecute(null, null, _T(“1.txt”), NULL, _T(“c:\\temp”), SW_SHOWNORMAL);
③ STARTUPINFO stinfo; //啟動視窗的資訊
PROCESSINFO proinfo; //程式的資訊
CreateProcess(NULL,_T(“notepad.exe)”,NULL,NULL,FALSE,NORMAL_PRIORITY_CLASS,NULL,NULL,&stinfo,&proinfo);
4. 如何確定頂層選單所佔據的選單行數:首先,計算主視窗的高度和客戶區高度;其次,從主框視窗的高度中減去客戶區、框邊界以及標題的高度;最後,除以選單欄的高度
CRect rc, rcClient;
GetWindowRect(rc);
GetClientRect(rcClient);
Int menuHeight;
menuHeight = (rc.Height() – rcClicent.Height()–
::GetSystemMetrics(SM_CYCAPTION) – :: GetSystemMetrics(SM_CY)*2))
- / :: GetSystemMetrics(SM_CYMENU) ;
5. 響應下拉選單的訊息為
ON_CBN_SELECTDOK(ID_TOOL_ZOOM, OnSelectZoomed)
6. 設定工具欄的標題
m_wndTestBar.SetWindowText(“your toolbar title”);
7. 如何獲得應用程式主視窗的指標
CWnd pMainWnd = AfxGetApp() ->m_pMainWnd;
CMain *pMain = ((CMain*)pMainWnd;
CRect rect;
CWnd* pParent = AfxGetApp()->GetMainWnd();
pParent ->GetWindowRect(&rect); //得到應用程式視窗矩形
//移到視窗
pParent -> MoveWindow(rect.left, rect.top, rect.Width()+1,rect.Height()+1,TRUE);
8. 獲得獲得子視窗
CMDIChildWnd* pChild = (CMDIChildWnd*)GetActive();
//或:CMDIChildWnd* pChild=MDIGetActive();
9. 獲得活動子視窗的活動檢視
CMyView* pView = (CMyView*)pChild->GetActiveView();
獲取當前視窗的指標
CWnd :: GetForegoundWindow();
10. 從控制程式碼轉換到指標
HWND hwnd;
hwnd = :: FindWindow(NULL, “TEST”);
CWnd* pWnd = FromHandle(hwnd);
11. 怎樣改變進度條控制元件的顏色,傳送訊息
m_progress.SendMessage(PBM_SETBKCOLOR, 0, RGB(255,0,0)); //背景色
m_progress.SendMessage(PBM_SETBARCOLOR, 0, RGB(0,255,0)); //前景色
12. 定義char num[10];
sprintf(num, “%d”, calnum); //格式化數字
char unit[]=”矩形”;
sprintf(num, “%s”, unit); //格式化字串
13. 改變字串的顯示字型和大小
CFont font;
font.CreatePointFont(300, “華文行楷”,NULL);
CFont *pOldFont=dc.SelectObject(&font);
dc.SelectObject(pOldFont);
14. 將路徑中的單’\’變為’\\’
CMyDoc *pDoc=GetDocument();
CString reportPath = pDoc -> strPathName;
int lentemp = reportPath.GetLength();
reportPath = reportPath.Left(lentemp-4);
int lenpath = reportPath.GetLength();
for(int i=0; i<lenpath-1; ) {
if(reportpath.GetAt(i) = = ‘\\’) {
reportpath.Insert(i, ‘\\’);
i+=2; }
i++; }
15. 獲取螢幕解析度
HDC hSrcDC;
hSrcDC = ::GetDC(AfxGetApp() -> m_pMainWnd->GetSafeHwnd());
int xSrc, ySrc;
xSrc = GetDeviceCaps(hSrcDC, HORIRES); //水平解析度
ySrc = GetDeviceCaps(hSrcDC, VERTRES); //垂直解析度
16. 讓Edit控制元件響應Enter鍵:利用獲取訊息來完成,呼叫虛擬函式
PreTranslateMessage(MSG* pMsg) {
If( pMsg ->message = = WM_KEYDOWN) {
switch(pMsg -> wParam) {
case VK_RETURN:
GetDlgItem(IDC_BTN_INPUT)->SendMessage(BM_CLICK, 0, 0);
return TRUE; } } }
17. 改變對話方塊的背景色:在InitInstance()中加入
SetDialogBKColor(RGB(160, 180, 220), RGB(255, 0, 0)); //後面是字型顏色
18. 讓指定的矩形框重畫 InvalidateRect(&rect, TRUE);
19. 怎樣選擇所選的List當前位置
int iTem;
POSITION pos=m_findCtrl.GetFirstSelectedItemPosition();
if(pos = = 0) {
MessageBox(“請選擇需要刪除的記錄”);
return; }
else {
iTem = m_findCtrl.GetNextSelectedItem(pos); }
//刪除List中的某行
m_findCtrl.DeleteItem(iTem);
m_findCtrl.Update(iTem);
20. 動態建立控制元件
CEdit m_edit;
CRect rect(0,0,100,200);
M_edit.Create(WS_CHILD | ES_AUTOHCROLL | WS_BORDER, rect, this, ID_EDIT_1);
21. 列表控制元件的應用
CListCtrl* m_list;
CRect rect_list;
this->GetCientRect(&rect_list);
rect_list.top + =100;
m_list -> Create(WS_CHILD | LVS_REPORT | WS_BORDER | LVS_SINGLESEL, rect_list, this, ID_TABLIST);
this ->m_list->ModifyStyle(LVS_EDITABELS,0L); //禁止標題編輯
m_list->ModifyStyle(0L ,LVS_REPORT); //設定為Report型別
m_list->ModifyStyle(0L, LVS_SHOWSELALWAYS); //始終高亮顯示被選中的表項
m_list->ModifyStyle(0L,LVS_NOSORTHEADER); //禁止標題編輯
m_list->SetBkColor(RGB(0,200,200)); //設定背景顏色
m_list->SetTextBkColor(RGB(0,200,200)); //設定文字背景顏色
m_list->ModifyStyle(LVS_OWNERDRAWFIXED,0L);
m_list->SetExtendedStyle(LVS_EX_FULLROWSELET //整行選中
| LVS_EX_HEADERDARGDROP //允許整列拖動
| LVS_EX_GRIDLINES //畫出網格線
| LVS_EX_FLATSB); // 扁平風格的滾動條
22. 取得當前獲得焦點的視窗控制程式碼
HWND hwnd = ::GetFocus();
int iID = :: GetDlgCtrlID(hwnd); // 根據控制程式碼取得其資源符號
23. 修改控制元件的字型
CFont m_font;
m_font.CreateFont(-12,0,0,0,400,FALSE,FALSE,0,GB2312_SHARSET,OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, VARIABLE_PITCH | FF_, “楷體_GB2312”);
//為想改變字型的控制元件改變
m_editPh.SetFont(&m_font, true);
void CMyTestDialog ::PeekMessageLoop() {
MSG msg;
while ( PeekMessage(&msg, NULL, NULL, NULL, NULL,NULL, PM_REMOVE)) {
TranslateMessage(&msg);
DispatchMessage(&msg); } }
Void CMyTestDialog :: WaitForThreadToTerminate( HANDLE hThread) {
//將指示哪個執行緒需要等待並作進一步處理
DWORD dwRet;
Do {
dwRet = :: MsgWaitForMultipleObject(1, &hThread, FALSE, INFINITE, QS_ALLINPUT);
if(dwRef != WAIT_OBJET_0) {
PeekMessageLoop(); }
}while ( (dwRet != WAIT_OBJET_0) && (dwRet != WAIT_FAILED));
//示例程式碼:假設對話方塊上有一個按鈕,當點選按鈕時,開始啟動第二個執行緒,等到第
//二個執行緒完成後,我們再繼續主執行緒:
void CMyTestDialog :: OnButton1() {
m_pUpdateThread = AfxBeginThread(UpdateDeviceContent, (LPVOID)this);
if(m_pUpdateThread) {
WaitForThreadToTerminate(m_pUpdateThread->m_hThread); }
//這裡可以加入自己的執行程式碼
Do whatever you want after the action is finished. }
2. 改變列表框表頭的顏色和字型,傳送一個HDM_GETITEM訊息
void CHeaderCtrlEx :: DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct) {
ASSERT(lpDrawItemStruct ->ctlType = =ODT_HEADER);
HDITEM hdi;
TCHAR lpBuffer[256];
Hdi.mask = HDI_TEXT;
Hdi.pszText = lpBuffer;
Hdi.uhTextMax = 256;
GetItem(lpDrawItemStruct->itemID,&hdi);
//畫按鈕框
:: DrawControl(lpDrawItemStruct->hdc, &lpDrawItemStruct->rcItem, DFC_BUTTOON, DFCS_BUTTONPUSH);
COLORREF crOldColor = :: SetTextColor(lpDrawItemStruct->hdc, RGB(255,255,0));
:: DrawText(lpDrawItemStruct->hdc, lpBuffer, strlen(lpBuffer), &lpDrawItemStruct->rcItem, DT_SINGLELINE | DT_VCENTER | DT_CENTER);
:: SetTextColor(lpDrawItemStruct->hdc, crOldColor); }
3. 修改標題欄中“無標題-title”
① 修改“無標題”部分,過載文件中的虛擬函式SetTitle,加入:
CDocument:: SetTitle(”your title”);
② 修改後半部分:將字串資源中的IDR_MAIN修改為
我的程式\n\nChange\n\n\nChangeTitle.Document\nChange Document
或者:在程式的任何地方呼叫如下語句:
(AfxGetMainWnd()) -> SetWindowText(“your title”);
③ 除去標題中間的”-“,可以通過過載CFramWnd類的OnUpdateTitle函式,這個函式在VC提供的幫助檔案中找不到,必須手工新增:
virtual void OnUpdateTitle(BOOL NaDa);
void CMain :: OnUpdateTitle(BOOL NaDa) {
CString csAppName;
csAppName.Format(AFX_IDS_APP_TITLE);
SetWindowText(csAppName); }
//此時顯示的結果只有字串資源AFX_IDS_APP_TITLE 所定義的字串
★ 另一種方法是在CMain的PreCreateWindow函式中修改的視窗風格:
BOOL CMain :: PreCreateWindow(CREATESTRUCT &cs) {
cs.style &= ~ (LONG)FWS_ADDTOTITLE;
return CWnd :: PreCreateWindow(cs); }
//使用此方法,視窗的標題只顯示IDR_MAIN字串中第一個\n之前的部分。
4. const的一些用法
int a=0;
const int* b=&a; [1] int const *b=&a;[2] const int* const b=&a; [3]
const char *p=”const”; [1] char const *p=”const”; [2] char const p=”const”; [4]
const char* const p=”const”; [4]
int a=0;
const int &b=a; [1] int const &b=a; [2] int & const b=a; [3] const int & const b=a; [4]
① 如果const位於星號左側,則const用來修改指標所指向的變數,即指標指向的為不可變的;
② 如果const位於星號右側,const就是修飾指標本身,即指標本身是不可變的;
③ [3]中指標本身是不可變的,而指標所指向的內容是可變的,這種情況下不能對指標本身進行更改操作,如b++是錯誤的;
④ [4]中指標本身和指向的內容均為常量
5. const作為引數用法
void fun0( const A *a) 在函式體中,按照const所修飾的部分進行常量化,如形參為const A* a,則不能對傳遞進來的指標的內容進行改變,保護了原指標所指向的內容;
void fun1(const A& a) 形參為const A& a,則不能對傳遞進來的引用物件進行改變,保護了原物件的屬性。[注:引數const通常用於引數為指標或引用的情況]
const修飾返回值: const A fun2(); const A* fun3()
一般用const修飾返回值為物件本身(非引用和指標)的情況多用於二目操作符過載函式,併產生新的物件的時候。
[總結]: 一般情況下,函式的返回值為某個物件時,如果將其宣告為const時,多用於操作符的過載。通常,不建議用const修飾函式的返回值型別為某個物件或對某個物件引用的情況。
6. 類成員函式中const的使用:一般放在函式體後void fun() const; 如果一個成員函式不會修改資料成員,那麼最好將其宣告為const,因為const成員函式中不允許對資料成員進行修改,如果修改,編譯器會報錯,大大提高了程式的健壯性。
7. 使用const的一些suggestioins:
① 要大膽地使用const,這將給你帶來無盡的益處,但前提是你必須搞清楚原委;
② 在引數中使用const應使用引用或指標,而不是一般的物件例項;
③ 要避免最一般的賦值操作錯誤,如將const變數賦值;
④ 不要輕易地將函式的返回型別定為cosnt;
⑤ 除了過載操作符外一般不要將返回值型別定為某個物件的const引用
8. 讓應用程式只執行一個例項: 在App的InitInstance新增如下程式碼:
HANDLE hSem = CreateSemaphore(NULL, 1, 1, m_pszAppName);
if(GetLastError() = = ERROR_ALREADY_EXISTS) { //訊號量存在,則有一個在執行
CloseHandle(hSem); //關閉訊號量控制程式碼
// 尋找先前的例項視窗
HWND hWndPrevious = ::GetWindow(::GetDesktopWindow(), GW_CHILD);
While(:: IsWindow(hWndPrevious)) { //檢查視窗是否有預設的標記
if(::GetProp(hWndPrevious,m_pszAppName)) { //有,則尋找主視窗
if(:: IsIconic(hWndPrevious)) { //視窗最小化,則恢復其大小
::SetForegroundWindow(hWndPrevious); //將主視窗啟用
::SetForgoundWindow(::GetLastActivePopup(hWndPrevious));
//將主視窗啟用
::ShowWindow(hWndPrevious, SW_NORMAL);
reurn FALSE; } //退出本例項
hWndPrevious = :: GetWindow(hWndPrevious, GW_HWNDNEXT); //繼續找 }
AfxMessageBox(“only one application program can run!”);
return FALSE; } }
1.獲取本機的IP地址
#i nclude <stdio.h>
#i nclude <winsock2.h>
#pragma comment (lib, “ws2_32.lib”)
Void CheckIP() {
WSADATA wsadata;
Char name[155];
Char *ip;
PHOSTENT hostinfo;
If (WSAStartUp( MAKEWORD(2,0), &wsadate) = = 0) {
If ( gethostname( name, sizeof(name)) = = 0) {
If((hostinfo = gethostbyname(name)) != NULL) {//獲得IP的函式
Ip = inet_ntoa(*(struct in_addr*)*hostinfo -> h_addr_list);
Printf*”%s\n”, ip); } }
WSACleanup(); } }
2. CWnd:: SetDlgItemInt(); 被對話方塊設定一個由字串表示的整型值。
CSemaphore ---à CSyncObject------àCObject
在一個程式或多個程式中允許訪問一種資源的允許執行緒數,CSemaphore物件維持當前獲取一種指定資源的執行緒個數。當計數大於0時,Semaphore物件的狀態是有訊號狀態;典型應用是用Semaphore去限制使用一種資源的執行緒個數。用WaitforSingleObject等待有訊號狀態,返回時則減少對Semaphore的計數。
3. 得到計算機所有驅動函式GetAllDriverList()
CString tmp = _T(“A:\\”), dir;
for(int i=1; i<=25; i++) {
dir = CString(‘A’+i)+ _T(“:\\”);
if(GetDriveType(dir.GetBuffer(0)) = = DRIVE_NO_ROOT_DIR) continue;
tmp += “;” + dir; }
return tmp;
4. 開啟對話方塊,選擇檔案路徑函式 OnBrowse()
BROWSEINFO bi;
char dispname[MAX_PATH], path[MAX_PATH];
ITEMIDLIST *pidl;
bi.hwndOwner = m_hWnd;
bi.pidlRoot = 0;
bi.pszDisplayName = dispname;
bi.ulFlags = BIF_RETUREONLYFSDIRS | BIF_EDITBOX | BIF_DONTGOBELOWDOMAIN;
bi.lpfn = 0;
bi.lParam = 0;
bi.iImage = 0;
if(pidl = SHBrowseForFolder(&bi)) { //顯示一個使用使用者可以選擇的檔案開啟對話方塊
SHGetPathFromIDList(pidl, path); //把一個item identifier list轉化為一個檔案系統路徑
m_folder = CString(path);
if(m_folder.IsEmpty() ) m_folder = GetAllDirverList();
UpdateData(FALSE); }
SHGetFileInfo(); 返回檔案系統中物件的資訊,比如檔案、folder、路徑、驅動器
5. 如何使用CImageList
CImageList m_iImageList;
m_iImageList.Create(24,24,TRUE,1,0);
HICON hIcon = NULL;
hIcon = (HICON)::LoadImage(::AfxGetInstanceHandle(), MAKEINTRESOURCE(IDI_KEBIAO0, IMAGE_ICON,24,24,0);
m_iImageList.Add(hIcon);
m_FileTree.SetImageList(&m_iImageList, TVSIL_NORMAL); //m_FileTree為TreeList控制元件
//或者這樣來建立:
m_imageList.DeleteImageList();
m_image.Create(16,16,ILC_COLORDDB,1,100);
m_listCtrl.SetImageList(&m_iImageList, LVSIL_SMALL);
6. 遍歷一個資料夾的檔案
OnFindFile(WPARAM wParam, LPARAM lParam) {
CString strFilePath = *((CString*)wParam);
if(strFilePath.Right(1) != “\\”) {
strFilePath +=”\\”; }
strFilePath += “*.*”;
CFileFind finder;
CString strFileName;
BOOL isHave = finder.FindFile(strFilePath);
while(isHave) {
isHave = finder.FindNextFile();
if(!finder.IsDirectory() && !finder.IsDots()) {
strFileName = finder.GetFilePath();
:: PostMessage((HWND)(GetMainWnd()->GetSafeHWnd()), WM_DISPLAY, (WPARAM)&strFileName, NULL); } }
finder.Close(); }
7. 如何來啟動這個查詢執行緒
新建一個類派生於CWinThread;CFindFileThread *pFindFileThread;
pFindFileThread = (CFindFileThread*)AfxBeginThread(RUNTIME_CLASS(CFindFileThread);
pFindFileThread -> PostThreadMessage(WM_FINDFILE, (WPARAM)&strFilePath,NULL);
8. 找到一個則傳送訊息WM_DISPLAY,並把檔案中全路徑作為引數返回
獲取一個檔案的資訊 OnDisplay(WPARAM wParam, LPARAM lParam) {
count++; //統計檔案個數
CString strFileName = *((CString*)wParam);
CFileStatus status;
C: GetStatus(strFileName, status);
CString unit = “Byte”;
float flen = (float)status.m_size;
if(flen>1024) {
flen /= 1024;
if(flen < 1024) unit = “KB”;
else {
flen /= 1024;
unit = “MB”; } }
CString size;
size.Format(“%1.2f”, flen);
int pos = strFileName.ReverseFind(‘\\’);
SHFILEINFO sfi; //檔案資訊結構體
if(:: SHGetFileInfo(strFileName, FILE_ATTRIBUTE_NORMAL, &sfi,
Sizeof(SHFILEINFO), SHGFI_USEFILEATTRIBUTES |
SHGFI_DISPLAYNAME | SHGFI_TYPENAME | SHGFI_ICON
| SHGFI_SMALLICON)) {
m_imgList.Add(sfi.hIcon);
m_filelist.InsertItem(count-1, sfi.szDisplayName, count-1);
m_filelist.SetItemText(count-1, 1, strFileName, Mid(0,pos));
m_filelist.SetItemText(count-1, 2, (size+unit));
m_filelist.SetItemText(count-1, 3, sfi.szTypeName); }
9. 在圖片中隱藏資訊的做法:加社會圖片檔案為c:\s.jpg, 文字為d:\w.txt, 在命令列方式視窗中輸入命令 COPY /B C:\s.jpg + d:\w.txt c:\d.jpg
10. 獲得應用程式所在路徑
char szCurPath[_MAX_PATH];
HINSTANCE hInst = NULL;
GetMoudleFileName( hInst, szCurPath, _MAX_PATH); //獲得應用程式所在路徑
char *p = szCurPath;
while( strchr(p, ‘\\’)) {
p= strchr( p, ‘\\’);
p++; }
*p = ‘\0’;
相關文章
- CSS常用功能程式碼集錦CSS
- 12個Flex常用功能程式碼Flex
- J2ME常用功能程式碼片斷
- 託管程式碼(.net)比非託管程式碼(vc++)慢嗎?C++
- 常用程式碼
- VC++檢測VM、VPC虛擬機器程式碼 .C++虛擬機
- VC++檢測VM、VPC虛擬機器程式碼C++虛擬機
- PACS系統原始碼 採用VC++程式語言開發 帶3維重建和還原功能原始碼C++
- RN常用程式碼
- 常用程式碼片段
- 微信小程式開發常用功能微信小程式
- 30 個Python程式碼實現的常用功能,精心整理版Python
- 用VC++實現上網撥號功能 (轉)C++
- Modbus常用功能碼協議詳解協議
- JS常用程式碼塊JS
- Laravel常用程式碼合集Laravel
- 常用的HTML程式碼
- 安卓常用程式碼片段安卓
- JS常用程式碼片段JS
- 常用的JavaScript程式碼JavaScript
- Android常用程式碼Android
- javascript常用程式碼段JavaScript
- html常用程式碼3HTML
- Gorm常用程式碼片段GoORM
- js- 常用指令碼程式碼JS指令碼
- 用VC++編寫CGI程式 (轉)C++
- 直播系統程式碼,常用搜尋中搜尋歷史,搜尋推薦功能
- js對cookie操作一些常用功能的封裝程式碼例項JSCookie封裝
- 前端常用手寫程式碼前端
- 常用,好用的js程式碼JS
- 頁面常用程式碼整理
- 網頁常用JavaScript程式碼網頁JavaScript
- CO常用事務程式碼
- 常用JS程式碼集(二)JS
- Basis常用事務程式碼
- python常用程式碼整理Python
- 逆向常用python程式碼Python
- myeclipse程式碼提示功能Eclipse