VC 深入詳解筆記之雜項

2021-08-26 07:37:20 字數 3447 閱讀 1667

1.shellexecute( null, _t("open"), _t("www.csdn.net"), null, null, sw_shownormal);開啟網頁

2.直接在**中新增還是報錯

經過多次試驗,我已經知道咋個添了

型別是:int [4]

名字是:a

3.今天在用vs2005的時候,突然載入了張ico,resource view不能開啟,如題。。。

折騰了半天,發現把全部的cpp視窗關閉就行了。。。。

記錄下,成果。。。。

4.在windows中,所有的訊息都是用乙個特定的整數值來表示的,為了避免我們自定義的這條訊息與其他已有訊息值發生衝突,應該利用windows提供的乙個常量:wm_user。小於這個常量的值都是windows系統保留的,我們自定義的訊息只需要大於這個值就可以了。於是在自定義訊息時,通常都是用wm_user加上乙個數值,這個值可由程式設計人員自行決定。

5.最好將自定義訊息宣告形式為 afxmsg lresult onfunction( wparam wparam , lparam lparam)不然都不知道自己怎麼死得

6.如何自定義訊息及相應的響應函式:

①在[架構類]的標頭檔案中定義訊息 #define um_progress wm_user + 1

②在類的宣告中新增訊息響應函式的宣告 afx_msg lresult onprogress(wparam wparam , lparam lparm);

③在begin_message_map巨集後面新增響應的訊息對映:on_message(wm_progress,onprogress)

④實現訊息響應函式onprogress

⑤在需要呼叫訊息響應函式的地方呼叫sendmessage(um_progress)或postmessage(um_progress)

注:sendmessage函式傳送訊息的機制是直接把訊息傳送給訊息響應函式,由訊息響應函式處理完成以後,sendmessage函式才返回。而postmessage函式是把訊息放在訊息佇列中,然後立即返回,之後程式通過getmessage函式按順序把訊息一條一條的取出來。

const的用法,此乃c++的內容:

雖然const我仔細琢磨一下都能弄對,但經常被它的咋先搞得很頭疼,因為每次看到const我都必須停下來多花點時間琢磨一下,才能確定自己的判斷。現在有個方法了,^_^

在形如 char * p = ch;中要放置const只有三個地方

①char前面②char和*中間,③*和p中間④ char * p const = ch[如果你這麼寫也沒有關係,因為編譯器會告訴你,這是個錯誤]

第①種情況和第③種情況都很好判斷,關鍵是第②種,形如: char const * p = ch;

這時候const 是指指向的值不能修改呢,還是指標不能修改?很簡單,const和資料型別char而不是指標標示*親近【記住這句話就夠了】,也就是說const盡可能控制char,實在沒有辦法了(char * const p = ch)才控制*號。這就說明第②種情況其實是和第①種情況一樣的。以上皆是主人公,也就是我啦,親自驗證,準確無誤。

可以過載lpcrect?這不是乙個資料型別嗎?

組框只起標示作用,如果對其有操作,就需要修改其id

第十九章dll

為了讓dll到處一些函式,需要在每乙個將要被到處的函式前面新增標示符: _declspec(dllexport)

載入動態鏈結庫的時候需要lib和dll檔案。並在專案設定中加入lib檔案

除了使用extern關鍵字表明函式是外部定義的之外,還可以使用識別符號:_declspec(dllimport)來表明函式是從動態鏈結庫中引入的。

將自己寫的**編譯成乙個dll檔案,然後提供乙個標頭檔案給客戶。

標頭檔案形如:

#ifdef dll1_api

#else

#define dll1_api _declspec(dllimport)

#endif

dll1_api int add(int a, int b);

dll1_api int sub(int a, int b);

getforegroundwindow函式將返回前景視窗的控制代碼。

匯出類:

class /*dll1_api*/ point //可以匯出整個類或部分函式

利用限定符:extern "c"可以解決c++和c語言之間相互呼叫時函式命名的問題,但是這種方法有乙個缺陷,就是不能用於匯出乙個類的成員函式,只能用於匯出全域性函式。

動態載入鏈結庫:

hmodule loadlibrary( lpctstr lpfilename);//lpfilename即要載入的模組名稱

farproc getprocaddress( hmodule hmodule, lpctstr lpprocname);//模組載入成功後,用此函式獲取函式位址

bool freelibrary( hmodule hmodule);

如果採用動態載入方式使用dll時,在需要訪問時,呼叫loadlibary函式載入該dll;當不再需要訪問該dll時,呼叫freelibrary函式釋放該dll的引用。

動態載入鏈結庫就不需要lib檔案了,使用形如:

void cdlltestdlg::onbtnadd()

cstring str;

str.format("5+3=%d", add(5,3));

messagebox(str);

}當dll中匯出函式採用的是標準呼叫約定時,訪問該dll的客戶端程式也採用該呼叫約定型別來訪問相應的匯出函式。

對於可執行模組來說,其入口函式是winmain。而對於dll來說,其入口函式是dllmain,但該函式是可選的。也就是說,在編寫dll程式時,可以提供也可以不提供dllmain函式。

bool winapi allmain(

hinstance hinstdll,

dword fdwreason,

lpvoid lpvreserved);

hook

setwindowshookex安裝乙個應用程式定義的鉤子過程,並將其放到鉤子鏈中。最後安裝的鉤子過程總是排列在該鏈的前面。

安裝滑鼠鉤子:

lresult callback mouseproc(int ncode, wparam wparam, lparam lparam);

在鉤子過程總對資訊處理完成之後,如果想把資訊繼續傳遞給下乙個鉤子過程,可以呼叫callnexthookex函式來實現。該函式的功能是把鉤子資訊傳遞給豆子鏈中下乙個等待接收資訊的鉤子過程。如果鉤子過程對當前訊息進行了處理,則應返回乙個非0值,以避免系統再次將此訊息傳遞給目標視窗過程;

lresult callnexthookex(hhook hhk, int ncode, wparam wparam, lparam lparam);

移走乙個已安裝的鉤子:

bool unhookwindowshookex(hhook hhk);

如果想要遮蔽當前正在執行的所有程序的滑鼠訊息和鍵盤訊息,那麼安裝鉤子過程的**必須放在動態鏈結庫中去實現。

VC 深入詳解筆記之雜項

1.shellexecute null,t open t www.csdn.net null,null,sw shownormal 開啟網頁 2.直接在 中新增還是報錯 經過多次試驗,我已經知道咋個添了 型別是 int 4 名字是 a 3.今天在用vs2005的時候,突然載入了張ico,resour...

VC 深入詳解之C 筆記

一 類的繼承 假設有乙個動物類,他們都有呼吸,睡覺,吃飯 繼承起來就是這樣子的 class animal animal void eat void sleep void breathe 下面定義一條魚 class animal public animal fish 這樣魚就繼承了 animal 的e...

VC 深入詳解 學習筆記

一 1 使用定義二進位制的值來定義相關的意義 如dword w cs hredraw cs vredraw 這樣就可以通過 或 運算來組合,同時要是不需要某個屬性可以通過 取反結合 與 運算來實現dword w cs hredraw cs vredraw dword h w cs verdraw 2...