如何有效的使用对话框之二

人生百味1989

人生百味1989

2016-01-29 11:52

如何有效的使用对话框之二,如何有效的使用对话框之二

如何有效的使用对话框之二
译者:徐景周(原作:Nishant S )

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/cyuyanjiaocheng/) 本文是《如何有效使用对话框》一文的继续.

1. 如何有效地使初始窗口不显示
当我们想让窗口初始时不显示时,通常会用ShowWindow(SW_HIDE) ,但实际上还是在启动是可以看到窗口一闪而过的痕迹。所以,可以使用下面的方法来实现它:
(1.1)先在构造函数中设置布乐变量 visible值为false.

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 来实现对话框的重新大小。
BOOL CFullScrDlgDlg::OnInitDialog(){    CDialog::OnInitDialog();    //...    int cx, cy;     HDC dc = ::GetDC(NULL);     cx = GetDeviceCaps(dc,HORZRES) +         GetSystemMetrics(SM_CXBORDER);     cy = GetDeviceCaps(dc,VERTRES) +        GetSystemMetrics(SM_CYBORDER);     ::ReleaseDC(0,dc);     //去除标题和边框    SetWindowLong(m_hWnd, GWL_STYLE,         GetWindowLong(m_hWnd, GWL_STYLE) &     (~(WS_CAPTION | WS_BORDER)));     // 置对话框为最顶端并扩充到整个屏幕    ::SetWindowPos(m_hWnd, HWND_TOPMOST,         -(GetSystemMetrics(SM_CXBORDER)+1),         -(GetSystemMetrics(SM_CYBORDER)+1),         cx+1,cy+1, SWP_NOZORDER);     //...    return TRUE; }
3. 如何在2K/xp下使窗口获取焦点
在2K/XP下我们可以用 AttachThreadInput 和SetForegroundWindow来有效的获取焦点。
//捕捉并设置当前焦点窗口为我们的窗口AttachThreadInput(    GetWindowThreadProcessId(        ::GetForegroundWindow(),NULL),    GetCurrentThreadId(),TRUE);//置我们的为焦点窗口SetForegroundWindow();SetFocus(); //释放threadAttachThreadInput(    GetWindowThreadProcessId(        ::GetForegroundWindow(),NULL),    GetCurrentThreadId(),FALSE);
4. 使你的对话框位于最顶端
可以直接在 OnInitDialog()中用SetWindowPos来实现。
SetWindowPos(&this->wndTopMost,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE);
5. 如何动态放大/缩小对话框
还是可以用SetWindowPos或MoveWindow来实现它。
void CTest_deleteDlg::OnMakeSmall() {    SetWindowPos(NULL,0,0,200,200,SWP_NOZORDER|SWP_NOMOVE);}void CTest_deleteDlg::OnExpand() {    SetWindowPos(NULL,0,0,500,300,SWP_NOZORDER|SWP_NOMOVE);}
或:
//伸、缩在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.En      
展开更多 50%)
分享

猜你喜欢

如何有效的使用对话框之二

C语言教程 C语言函数
如何有效的使用对话框之二

如何有效地使用对话框

C语言教程 C语言函数
如何有效地使用对话框

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

如何使用文件复制对话框

编程语言 网络编程
如何使用文件复制对话框

关于对话框

编程语言 网络编程
关于对话框

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

Excel“选项”对话框使用问答

办公软件
Excel“选项”对话框使用问答

折叠对话框

办公软件
折叠对话框

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

页边距的设定技巧(HTML)

页边距的设定技巧(HTML)

精彩网页九“慎”

精彩网页九“慎”
下拉加载更多内容 ↓