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

2016-01-29 11:52 6 1 收藏

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

【 tulaoshi.com - C语言心得技巧 】

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

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

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
                        

来源:http://www.tulaoshi.com/n/20160129/1483713.html

延伸阅读
标签: autocad教程
在执行AutoCAD命令的过程中,用户与AutoCAD之间主要是通过文本窗口和对话框来进行人机交互。 2.3.1使用文本窗口 AutoCAD的文本窗口与AutoCAD窗口相对独立,用户可通过如下方式来显示该窗口: (1)在AutoCAD中按F2键 (2)选择菜单【View(视图)】→【Display(显示)】→【TextWindow(文本窗口)】 (3)在命令行调用“textscr”命令 该窗口...
Director中非常有用的一个Xtra是MUI Dialog Xtra,这是D自代的对话框生成器。在6.0版本中就有这个Xtra了,但是很奇怪大多开发者都只应用了它最基本的特性,如果他们能否充分利用MUI Xtra的话,那么,你就可以自己定义个完全响应的对话框,而不是去用很废内存和磁盘空间的MIAW来实现。你可以去任意定制它,并且你可以完全根据你或者你的客...
标签: windows 操作系统
用户在Windows下与打开文件对话框打交道的次数一定不少,我们在一些软件的使用过程中,免不了要使用Windows的标准打开对话框来打开文件。但是,我们在使用Windows 2000打开文件对话框是还有一些小小的技巧,充分地利用这些小技巧,能够提高我们使用计算机的效率,同时还可以达到一些意想不到的功能。 1、快速加入特定的文件 ...
无模式对话框的创建与使用 作者:张连成 在编程过程中,对话框经常用到,但对无模式和模式对话框的创建和销毁过程,经常有误解,下面提供一个无模式对话框的例子来剖析无模式对话框的形成: 无模式对话框与有模式对话框不同的是在创建后其他窗口都可以继续接收用户输入,因此无模式对话框有些类似一个弹出窗口。创建...
自绘对话框 作者:Alon 下载示例源代码 闲来无事,写了一个简单的对话框界面,希望给需要的朋友有所帮助。 界面如下: 界面很单调,我只是想说明一下如何实现界面的自绘。如果有需要,也可以绘制更复杂漂亮的界面。 程序的实现也不复杂,接下来就跟着我一步一步做。...

经验教程

854

收藏

94
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部