第九章(程式外觀)

2021-06-19 01:45:11 字數 1815 閱讀 8181

///改變視窗外觀(大小,位置,視窗style之類,總之就是createwindow()裡面可以設定的)

(1)在視窗建立之前改變

在cmainframe::precreatewindow(createstruct& cs)函式裡有引數createstruct& cs這個引數,這個引數是個結構體,裡面的成員是createwindow()函式的各個引數,改變這個引數的值,就能在建立視窗之前改變它的外觀

(2)在視窗建立完成之後改變

12345 long setwindowlong(
hwnd hwnd,               // handle to window
int nlndex,              // offset of value to set
long dwnewlong           // new value );
第二個引數:

gwl_id

-12設定乙個新的

視窗識別符號

gwl_style

-16設定乙個新的視窗風格。

gwl_wndproc

-4為視窗過程設定乙個新的位址。

建立完之後再改變,就應該在oncreate()函式裡面呼叫這個函式了,cmainframe::oncreate()函式裡面會呼叫基類的oncreate()函式建立視窗,在return 之前呼叫這個函式就能改變視窗的風格了。

//改變視窗游標,圖示,背景

視窗的游標,圖示和背景這些引數都是設計視窗類的時候確定的,那個createstruct引數裡面並沒得改,setwindowlong()函式也沒得改。

(1)在視窗建立之前修改

雖然createstruct結構體沒有icon,cursor這些引數,但是它有lpszclass這個引數,只要自己寫個新的視窗類並且註冊,讓那個引數建立我們自己寫的視窗類就能得到修改了的圖示,游標和背景之類了。

bool cmainframe::precreatewindow(createstruct& cs)

這裡還有個要注意的,視類視窗覆蓋在主框架上,對游標和背景的修改會被覆蓋掉,所以應該在view類的precreatewindow()函式裡也把cs.lpszclass修改了才行。

除此之外還有利用afxregisterwndclass(unit nclassstyle,hcursor hcursor=0,hbrush hbrush=0,hicon hicon=0);函式返回值就直接是註冊之後的類名,直接賦給cs.lpszclass就能改變背景,圖示,游標了。

cs.lpszclass=afxregisterwndclass(cs_hredraw | cs_vredraw,loadcursor(null,idc_cross),(hbrush)getstockobject(black_brush),0);
(2)建立視窗之後修改

主要是利用

dword winapi setclasslong(

_in_ hwnd hwnd,

_in_ int nindex,

_in_ long dwnewlong

);

引數一:指定要設定屬性的視窗控制代碼      引數二:gcl_hbrbackground(設定新畫刷)gcl_hcursor(設定新游標)gcl_hicon(設定新圖示)

引數三:新的屬性(記得強制轉型為long)

第九章(筆記)

轉移指令是可以修改ip,或同時修改cs和ip的指令 offset 是用於提取標號偏移位址的操作符 jmp在第2章裡說到時用於修改ip或同時修改cs和ip的轉移指令,這章裡單獨的jmp指令是乙個無條件的轉移指令 jmp short 標號 是實現段內短轉移 jmp near ptr 標號 是實現段內近轉...

第九章作業

班級 0401304 學號 2013211526 姓名 鄧小俊 2.身份驗證 依據使用者所提供的身份資訊,來進行登入驗證,可以再細分為使用者是否可以登入sql sever 使用者是否可以登入到指定的目標資料庫等。授權 已通過身份驗證的使用者,檢查其所被賦予的許可權,是否可以訪問或者執行目標的物件 3...

第九章 引用

引用擁有指標的所有功能,只是語法更加的簡單 1 引用就是別名,變數的另外乙個名字,變數和別名它們的位址是一樣的,操作別名就是操作變數 2 引用就是別名常量,一旦引用被初始化就不能再改變了 可以理解為指標常量,指向的值不能改變,能改變的只是它的該位址處的值 3 引用物件huamn mike human...