對於視窗的子類化相信大家並不陌生:基於某乙個控制項功能,用視窗子類化來實現我們想要的功能!由於控制項的封裝,我們無法對它進行直接操作修改,但是我們可以截獲windows給控制項過程傳送的訊息,從而達到控制控制項視窗的目的!對於單個控制項的子類化,並不費事,但是我們如果要註冊多個這樣的控制項就麻煩了,於是產生了超類化的思想。
可以用getclassinfoex()來獲取現存類的屬性,然後修改結構的內容,就可以派生出乙個功能不同的類!如下面一段**:
基於edit類的newedit類就產生了,其中_procedit子程式是newedit類的過程函式。這不禁讓我想到當初建立windows視窗的時候,每次都要註冊一次wndclas***結構體函式,下面使我們非常熟悉的**:
這豈不也是對於視窗的「子類化」嗎?我們可以自定義視窗的背景顏色,游標位圖以及主視窗圖示!然後呼叫createwindowex來建立,我想視窗超類化的思想和這裡肯定也有些未知的聯絡(不知道我的思考對不對)!當然也可以在rc檔案中用我們超類化好的「newedit」,下面是一段演示**,是針對進製轉化超類化出來的,控制項中只能輸入0~9以及a~f,並自動把小寫字母大寫,
資源檔案的定義如下:
彙編源**如下:
這中間我也學到了很多,老早就從zoologist的文章中了解到如何去用spy++去檢視視窗屬性,以及怎麼去截獲視窗訊息。今天用了下,明白了視窗一些基本的屬性,以及看到別的程式一些不知道的風格可以去「擷取」,而不必開啟msdn,啃著枯燥的英文!突然想到的一點就是有些程式當游標放在button上面就變成乙個手型,很好奇。通過spy++研究到可以截獲wm_mousemove訊息來了解游標的活動範圍,然後用api函式setcursor來改變游標形狀!這個我沒有實驗過,感覺中不能實現游標的持續性停留變化。還有一招就是呼叫api函式setclasslong,利用gcl_hcursor引數來「永久改變」,但後再改回來!麻煩了些,具體還沒有實驗,調研中……
Win32彙編基礎
常用指令 mov 目標運算元,源運算元 mov eax,0x0 進行資料傳遞 movzx mov zero x 以0填充高位,用法同上,push poppushad 所有暫存器壓棧 8個 popad 所有暫存器出棧 8個 lea 取位址指令,類似c語言中的 call 呼叫函式指令 add 加 sub...
Win32彙編 實數
386 選擇的處理器 model flat,stdcall option casemap none 指明識別符號大小寫敏感 include kernel32.inc 要引用的標頭檔案 includelib kernel32.lib 要引用的庫檔案 includelib msvcrt.lib 引用c庫...
win32 控制項操作
int getwindowtext hwnd hwnd,lptstr lpstring,int nmaxcount boolsetwindowtext hwndhwnd,lpctstrlpstring 問題 如下,vc6 問題描述請看注釋.char sztext 256 wparam wparam ...