利用CDialogBar來實現類似工具欄的浮動條

2021-03-31 08:56:31 字數 1895 閱讀 4653

如果你想實現有工具條的浮動和定位功能,而且可以方便的擺放任何控制項上去,請繼續看這篇文章吧!

那就使用cdialogbar就可以擁有和cdialog一樣的方便和快捷。

步驟1:新增乙個cdialogbar派生類

在資源中新增乙個對話方塊,再採用類嚮導來新增類,找不到cdialogbar作為基類吧,可以先用cdialog作為基類產生乙個,然後把所以的「cdialog」替換為「cdialogbar」,替換完成了。編譯一下,^_^有錯誤吧!!請看步驟2。

步驟2:解決編譯錯誤並完善該類

其實錯誤就是構著函式呼叫基類時有問題,: cdialogbar(/*cdlgbar::idd, pparent*/)象這樣注釋掉就可以了,新增乙個類似oninitdialog的函式,在cdialogbar中是不存在oninitdialog的訊息的,至少我還不知道,因為初始化是在建立後呼叫的所以我們就重寫virtual bool create(cwnd* pparentwnd,uint nidtemplate,uint nstyle,uint nid);這個函式。注意哦用嚮導新增的create函式的引數是不對的喔,看上面。下面是實現**(很簡單的)

bool cdlg***::create(cwnd* pparentwnd,uint nidtemplate,uint nstyle,uint nid)

bool cdlg***::initdialogbar()

步驟3:建立和使用

if (!m_barattrib.create(this,idd_dlg_***_attrib, cbrs_right|cbrs_gripper, ***))

m_barattrib.setwindowtext("部件屬性");

***是乙個資源id手工直接在資源的.h檔案中新增一條,不會,這裡就不教了。

工具條的顯示和隱藏**如下,自己慢慢理解吧:

showcontrolbar(&m_barattrib, (m_barattrib.getstyle() & ws_visible) == 0, false);

上面**實現後dodataexchange也是可以用,給控制項新增控制項就和cdialog一樣的方便咯

但是還有乙個要注意的是就是控制項類物件的新增,我試了一下好像不行,視窗控制代碼好像

總是0的,不能使用。還是使用getdlgitem(idc_driver_list)來取得控制項指標吧。

其他方面的心得

利用dodataexchange來控制自定義的輸入格式控制這裡就舉乙個文字框的例子

給文字控制項新增完變數後就在dodataexchange會出現如下**

ddx_text(pdx, idc_***_var, m_strvar);//系統產生的

ddv_maxchars(pdx, m_strvar,var_max_len);//加入長度控制後產生的

ddv_filenamestring(pdx, m_strvar);//自定義的手工新增的實現見下面

void c***::ddv_filenamestring(cdataexchange *pdx, cstring m_strfilename)

}還有幾個注意點是

1.只有執行了updatedata()才會呼叫dodataexchange函式若中途 執行了pdx->fail(); updatedata()就返回false。

2. ddx_text(pdx, idc_***_var, m_strvar);//系統產生的

ddv_maxchars(pdx, m_strvar,var_max_len);//加入長度控制後產生的

ddv_filenamestring(pdx, m_strvar);//自定義的手工新增的實現見下面

如上面幾句都是對乙個控制項的內容的控制,他們必須放在一塊,且ddx_text要放在第一句,這樣在介面上就可以正確的指出那個控制項的內容有問題,控制項會被設定焦點並選中全部內容。

好了先寫這麼多了

利用shellcode來實現API的自動定位

include void main 拖入od中把shellcode轉換成機器碼 太麻煩了就不做了 但是這串 尋找kernel32.dll的方法是直接mov ebp,ecx 0x08 根據偏移量直接找到。ldr ininitializationmodulelist鍊錶在win7後把kernel32.d...

利用static來實現單例模式

class singleton private static singleton instance null publicsynchronizedstatic singleton getinstance return instance 就利用sington.getinstace就可以了,獲得的是同乙...

利用HandlerInteceptor來做請求驗證

小疑問 為什麼是interceptor的名字是用handler開頭的而不是httprequest?其實這是spring自己的 servlet的api裡是沒有interceptor的,功能相似的是filter,但是spring需要更強的控制能力,可以說是定製能力,filter只有interceptor...