MFC程式設計學習

2021-06-03 15:41:29 字數 4825 閱讀 4802

1.對話方塊的key訊息先要被pretranslatemessage函式處理,然後轉到onkeydown處理 ,所有遮蔽一些按鍵可以到pretranslatemessage函式裡進行(注意過濾wm_keydown 和 wm_syskeydown(一些系統按鍵))

2.組合鍵的判斷

bool bctrlkeydown =

getasynckeystate(vk_control)>>((sizeof(short) * 8) - 1);

bool baltkeydown =

getasynckeystate(vk_menu)>>((sizeof(short) * 8) - 1);

if ((nchar==vk_f8 && bctrlkeydown && baltkeydown))

3.查詢和殺程序

********************==獲取程序名稱*************************===

tchar szprocessname[max_path] = text("");

handle hprocess = openprocess( process_query_information |

process_vm_read ,

false, process_id );

// get the process name.

if (null != hprocess )

}closehandle( hprocess );

********************===獲取程序列表***********************************==

dword process_list[1024],cbneeded,process_count;

if(!enumprocesses(process_list,sizeof(process_list),&cbneeded))

*************************==殺程序******************************====

handle process_handle = openprocess(process_vm_write|process_terminate, false, process_list[i]);//注意許可權process_all 無法使用

if(process_handle == null) continue;

terminateprocess(process_handle,0);

closehandle(process_handle);

4.vc和bcb的dll匯入匯出(最好加extern "c")

#define dllexport extern "c" __declspec(dllexport)

#define dllimport extern "c" __declspec(dllimport)  _stdcall   //bcb匯入dll中函式要加_stdcall關鍵字

5.crt庫和mfc庫衝突解決

當在mfc中使用c++標準庫時會報

nafxcwd.lib(afxmem.obj) :error lnk2005:

"void * __cdecl operator new(unsigned int)"(??2@yapaxi@z) already

解決方法:

選擇:選單「專案」-->「設定」->鏈結-->input。

在第一行「物件/庫模組」中最前面輸入nafxcwd.lib;libcmtd.lib

在第二行「忽略庫」框中,輸入nafxcwd.lib;libcmtd.lib。

確定,重新鏈結,通過!

6.多位元組單位元組轉換

void toolhelper::utf8tounicode(const char* utf8,wchar_t** unicode)

//將utf8轉換為多位元組

void toolhelper::utf8toansi(const char* utf8,char** ansichar)

}//將多位元組轉換為utf8

void toolhelper::ansitoutf8(const char* ansichar,char**utf8code)

}//將寬位元組轉換為utf8

void toolhelper::unicodetoutf8(const wchar_t* unicode,char** utf8code)

if(chbuf!=null)

}//將多位元組轉換為寬位元組

void toolhelper::chartowchar(const char *ansichar, wchar_t **unicode)

//將寬位元組轉換為多位元組

void toolhelper::wchartochar(const wchar_t *unicode,char **ansichar)

7.判斷檔案是否存在

int file_exists(const char *filepath) 

8.vc2010命令列編譯

msbuild easykeytool.sln /t:rebuild /p:configuration=release

9.修改應用程式圖示

hicon hicon = ::loadiconw(hinstance, makeintresource(idi_cefclient) );

::sendmessage( hwnd, wm_seticon, true,  (lparam)hicon );

::sendmessage( hwnd, wm_seticon, false, (lparam)hicon );

10.c/c++混合編譯時,注意把c的**使用extern "c"括號起來

#ifdef __cplusplus

extern "c"

#endif // __cplusplus

11.匯出dll函式

a.新建乙個win32的dll工程

b.使用**匯出函式

#if 0

#define dll_export extern "c" __declspec(dllexport)

#else

#define dll_export

#endif

dll_export

int _cdecl add(int a,int b);

使用def檔案匯出函式

library mydll

exports

add @1

控制項使用

截獲mfc控制項的訊息方法

1.重新繼承乙個控制項,重寫相應事件

2.主視窗windowproc

int wmid, wmevent;

wmid    = loword(wparam);

wmevent = hiword(wparam);

影象繪製雙快取

rect rect;

m_invoicepic.getclientrect(&rect);

cdc* pdc = getdlgitem(idc_static_pic)->getwindowdc();

cdc memdc;

cbitmap membitmap;

memdc.createcompatibledc(pdc);

membitmap.createcompatiblebitmap(pdc,rect.right,rect.bottom);

memdc.selectobject(&membitmap);

memdc.fillsolidrect(&rect,pdc->getbkcolor());

int x=0,y=0;

getshowpicpos(&x,&y);

m_picsrc.draw( memdc, 0, y );

pdc->bitblt(0,0,rect.right,rect.bottom,&memdc,0,0,srccopy);

memdc.deletedc();

membitmap.deleteobject();

releasedc( pdc );

MFC網路程式設計學習

網路程式設計人員可以呼叫windows作業系統套接字訪問通訊協議,套接字存在與通訊區域中,windows套接字只支援乙個通訊區域即網際域 af inet 套接字的型別有三類 流式套接字 sock stream 和資料報式套接字 sock dgram 和原始套接字 流式套接字基於tcp協議,資料報式套...

MFC程式設計入門

簡單講解mfc,讓希望學會mfc的朋友可以簡單入門。都說mfc 沒飯吃 其實不然,mfc在windows桌面應用的開發上仍是首選,甚至可以說無可替代。簡單的 教程 用的vs2013 沒有vs2013的可以在 範磊的c 教程 雖然是老教程,但是教程質量不是用新舊能決定的。mfc簡單了解 mfc製作字串...

MFC程式設計筆記

選中乙個對話方塊,右鍵 新增資源 選擇menu新增。在oninitdialog中載入這個menu控制項。m menu.loadmenu idr menu1 setmenu m menu 然後編輯那個menu,對於每個按鈕,右鍵 新增事件處理程式,新增對應的處理 對於每乙個新建的對話方塊,都右鍵 新增...