用Win32實現帶分割條 Splitter 的視窗

2021-06-28 15:20:46 字數 1229 閱讀 3737

在mfc中借助嚮導的幫助很容易就能建立乙個帶有分隔條(splitter)的視窗,但是在win32中一切都沒有那麼容易,在這篇文章裡我帶領大家用win32實現乙個帶這種splitter的視窗。

乙個splitter分隔條,能夠將乙個視窗分成兩部分,在我們實際的編碼專案中,這分開的兩個視窗能實現各自的功能。但是這個splitter又是什麼呢? 告訴大家,這個splitter其實僅僅是兩個分開的視窗的sunken edge。

首先我們在當前視窗下建立兩個子視窗,分別是edit和static,這都是win32內建的子視窗控制項。這裡要說明一下的是,下面的**中我使用了自己寫就的乙個視窗類,一些訊息響應我用這個視窗類的虛函式實現了,為了完整起見,我在這裡將整個函式體都列了出來。我的函式命名和引數列表都是參考mfc的,如果對windows訊息到虛函式的對映不是特別明白,可以參考一下msdn。

void kwindow

::oncreate

(createstruct

* pcst,hwnd hwnd

) 要說明的是:m_splitterpos是分隔條在水平方向的位置。edit和static視窗建立時的大小都是0,因此我們需要在wm_size訊息中讓他們調整到合適的大小。

void kwindow

::onsize

(uint ntype,

int cx,

int cy

) 此外我們還需要讓edit和static各自顯示一些文字。

void kwindow

::ondraw

(hdc hdc

) 現在執行一下,分隔條是能看見了:

下面要做的是當滑鼠移到分隔條周圍時,能夠調整分隔條的位置,兩個子視窗的大小也隨之更改。首先我們在wm_lbuttondown訊息內設定乙個標記,表示現在可以調整大小,並設定滑鼠的形狀。在wm_lbuttonup訊息內,調整splitter位置的工作已經結束,因此將標記設定為不允許調整大小,並將滑鼠形狀設定為正常情況。而在wm_mousemove訊息內,我們可以設定splitter的位置。

void kwindow

::onmousemove

(uint nflags,point pos

)}void kwindow

::onlbuttondown

(uint nflags, point pos

)}void kwindow

::onlbuttonup

(uint nflags, point pos

)}

win32實現檔案追加

實現原理 開啟兩個檔案,迴圈讀取要追加的檔案內容,然後寫入到要被追加檔案的末尾 相關api createfile setfilepointerex readfile writefile funname filecat param szexistsfilepath 要被追加的檔案路徑 szaddfil...

帶dos除錯視窗的win32程式

include define create debug console file fpdebugout null file fpdebugin null file fpdebugerr null if allocconsole messagebox null,t 控制台生成失敗。null,0 set...

WIN32編寫Warkey 實現改建

下面介紹下,利用win32編寫自己的warkey,實現改鍵,編譯出的 更小巧,希望對感興趣的朋友有些幫助。主要利用低階鍵盤和滑鼠鉤子,無需額外的dll,程式很小巧,主要 如下。ifndef winver define winver 0x0500 endif ifndef win32 winnt de...