如何有效的使用对话框之二
如何有效的使用對話框之二
譯者:徐景周(原作:Nishant S )
本文是《如何有效使用對話框》一文的繼續.
1. 如何有效地使初始窗口不顯示
當我們想讓窗口初始時不顯示時,通常會用ShowWindow(SW_HIDE) ,但實際上還是在啟動是可以看到窗口一閃而過的痕跡。所以,可以使用下面的方法來實現它:
(1.1)先在構造函數中設置布樂變量 visible值為false.
(1.2)重載 WM_WINDOWPOSCHANGING,并添加下面代碼:
void CTest_deleteDlg::OnWindowPosChanging(WINDOWPOS FAR* lpwndpos) {if(!visible)lpwndpos->flags &= ~SWP_SHOWWINDOW;CDialog::OnWindowPosChanging(lpwndpos); }(1.3)然后設布爾visible變量值為true,并在要顯示窗口時,再用ShowWindow(SW_SHOW)既可。
visible = true; ShowWindow(SW_SHOW); 2. 對話框的全屏顯示
對話框的全屏顯示可以在OnInitDialog()中用 SetWindowPos 和 HWND_TOPMOST 來實現對話框的重新大小。
3. 如何在2K/xp下使窗口獲取焦點
在2K/XP下我們可以用 AttachThreadInput 和SetForegroundWindow來有效的獲取焦點。
4. 使你的對話框位于最頂端
可以直接在 OnInitDialog()中用SetWindowPos來實現。
5. 如何動態放大/縮小對話框
還是可以用SetWindowPos或MoveWindow來實現它。
或:
//伸、縮在IDC_DYCREDITS和IDC_COPYRIGHT兩STATIC控件間,做為分隔線 BOOL CAbout::OnInitDialog() {CDialog::OnInitDialog(); //"關于"對話框中對話框可收縮效果CRect Rect1,Rect2; //對話框收縮時大小 GetDlgItem(IDC_DYCREDITS)->GetWindowRect(Rect1); GetDlgItem(IDC_COPYRIGHT)->GetWindowRect(Rect2); m_nReducedHeight = Rect1.Height()+(Rect1.top -Rect2.bottom)/2; //收縮后窗體高度dlgRect.bottom -= (Rect1.Height()+(Rect1.top -Rect2.bottom)/2); MoveWindow(&dlgRect); //如果要顯示對話框起始動態效果的話,不能使用該句m_bVertical=false; //默認收縮對話框 } // --------------------------------------------------------- // 名稱: OnMore // 功能: 是否允許顯示 // 變量: 無 // 返回: 無 // 編寫: 徐景周,2002.4.8 // --------------------------------------------------------- void CAbout::OnMore() {m_bVertical = !m_bVertical; if(m_bVertical == FALSE) //不顯示{ SetDlgItemText(ID_MORE,_T("更多>>"));SizeWindow(m_nReducedHeight,true);// m_DyCredits.EndScrolling(); //停止滾動} else //顯示{ SetDlgItemText(ID_MORE,_T("<<隱藏"));SizeWindow(m_nReducedHeight,false);m_DyCredits.StartScrolling(); //開始滾動} UpdateWindow(); }// --------------------------------------------------------- // 名稱: SizeWindow // 功能: 伸展或收縮對話框 // 變量: ReduceHeight-收縮高度,bExtend-是否伸展 // 返回: 無 // 編寫: 徐景周,2002.4.8 // --------------------------------------------------------- void CAbout::SizeWindow(int ReduceHeight, bool bExtend) {CRect rc;GetWindowRect(&rc);if(bExtend){for (int i= 0; i < ReduceHeight; i++){rc.bottom--;MoveWindow(&rc);}}else{for (int i= 0; i < ReduceHeight; i++){rc.bottom++;MoveWindow(&rc);}} } 6. 如何讓對話框回到屏幕中來
當對話框被拖離屏幕時,可用下面代碼使其回到屏幕中。
注:它必須是頂端窗口且不是child窗口。
7. 如何給對話框添加或去掉最大/最小化按鈕
在OnCreate()或OnInitDialog() 改變其顯示風格既可。
或用:
ModifyStyle (NULL, WS_MAXIMIZEBOX); 8. 改變鼠標指針
可以在OnSetCursor中實現.
9. 改變對話框的前景和背景色
可以在InitInstance()中實現。
10. 在任務條上不顯示圖標
先從CWinApp繼承類中建立一個不顯示的頂級窗口.
在 OnInitDialog中修改顯示風格 WS_EX_APPWINDOW.
BOOL CNoTaskBarIconDlg::OnInitDialog() {CDialog::OnInitDialog();ModifyStyleEx(WS_EX_APPWINDOW,0);SetIcon(m_hIcon, TRUE); // Set big iconSetIcon(m_hIcon, FALSE); // Set small icon// TODO: Add extra initialization herereturn TRUE; // return TRUE unless you set the focus to a control } 11. 加入上、下文幫助
在 OnInitDialog 修改顯示風格,加入上、下文HLP幫助顯示.
重載OnHelpInfo(...),用顯示相關幫助信息
BOOL HelpDialog::OnHelpInfo(HELPINFO* pHelpInfo) {short state = GetKeyState (VK_F1);if (state < 0) // F1 key is down, get help for the dialogreturn CDialog::OnHelpInfo(pHelpInfo);else{ // F1 key not down, get help for specific controlif (pHelpInfo->dwContextId)WinHelp (pHelpInfo->dwContextId, HELP_CONTEXTPOPUP);return TRUE;} }總結
以上是生活随笔為你收集整理的如何有效的使用对话框之二的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 十一、“由专入分易,由分入专难。”(20
- 下一篇: 十二、“最是真心藏不住,一言一语总关情。