(EZLearn 語言學習機中, 仿 iPod的面版)
如果你希望你的應用程式能變換各種面版( skin), 你應該不喜歡看到有一個 標題Bar 在上面吧.
可是如果沒有 Title Bar , 那使用者要怎麼移動視窗呢? 我們希望如果要移動視窗, 應該是讓自己決定.
把視窗當作是一個方形的面版, 然後用滑鼠按左鍵拖拉移動視窗位置, 是我在 Longman Dictionary Helper (LDH) 啟動面版時, 使用技巧之一. 這項技巧同時也用在 EZLearn 語言學習機上,拖拉 Hello Kitty skin 時使用的方法,只不過 LDH 用 MFC, EZLearn 用 C#. 兩者大同小異.
MFC 的作法如下:
移動無標題視窗
視窗 Bording 應該要設定為 Resizing
Step 1: 加入視窗處理宣告
BEGIN_MESSAGE_MAP(CMoveDlg, CDialog)
ON_WM_NCHITTEST() // for mouse draging moving
END_MESSAGE_MAP()
Step 2: 加入開關
//[API] 滑鼠拖拉移動 Enable/Disable
void CMoveDlg::setDragMove(bool bValue){
m_bDragMove=bValue;
}
Step 3: 欺騙系統目前是在 Title
// [視窗處理函式] 滑鼠進入視窗處理
LRESULT CMoveDlg::OnNcHitTest(CPoint point){
LRESULT retValue;
// 注意: 當視窗為 WS_EX_TRANSPARENT 屬性時, 將不會接到
// Mouse Hit
// 會讓 Window Drag 功能會失效
if(m_bDragMove){
retValue=HTCAPTION; // enable drag the window from
// any point
}else{
retValue= CDialog::OnNcHitTest(point); // 呼叫原來的處理
}
return retValue;
}
完成!
Enjoy.
by Jing
沒有留言:
張貼留言