判断窗体是否为空

GetSafeHwnd

 

HWND hwnd = pwnd->GetSafeHwnd(); //得到它的HWND
就不会出现问题,因为尽管当pwnd是NULL时,GetSafeHwnd仍然可以用,只是返回NULL,通过GetSafeHwnd()的实现代码就更清楚了

转载于:https://www.cnblogs.com/MarvinGeng/archive/2013/02/18/2915678.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1.窗体顶端 1.当处理特定问题时的循环次数已知时,通常采用的语句是( )。 选择一项: A.for 窗体底端 2.窗体顶端 2.在switch语句的每个case块中,假定都是以break语句结束的,则此switch语句容易被 改写成的语句是( )。 选择一项: if 窗体底端 3.窗体顶端 3.for语句能够被改写成的语句是( )。 窗体底端 窗体顶端 d. while 窗体底端 4.窗体顶端 4.下面循环语句执行结束后输出的i值为( )。 for(int i=0; i<n; i++) if(i>n/2) {cout<<i<<endl; break;} 选择一项: 窗体顶端 b. n/2+1 窗体底端 5.窗体顶端 5.在下面循环语句中,内层循环体S语句的执行总次数为( )。 for(int i=0; i<n; i++) for(int j=i; j<n; j++) S; 窗体底端 窗体顶端 d. n(n+1)/2 窗体底端 窗体顶端 6.在下面的do循环语句中,其循环体被执行的次数为( )。 int i=0; do i++; while(i*i<10); 选择一项: 窗体底端 b.3 窗体顶端 在下面的一维数组定义中,有语法错误的选项是( )。 窗体底端 窗体顶端 d. int a[5]; 窗体底端 窗体顶端 在下面的二维数组定义中,语法正确的选项是( )。 窗体底端 窗体顶端 c. int a[][3]={{1,3,5},{2}}; 窗体底端 窗体顶端 试题正文 假定一个二维数组的定义语句为"int a[3][4]={{3,4},{2,8,6}};",则元素a[1][1]的值为( )。 窗体底端 窗体顶端 c. 6 窗体底端 窗体顶端 假定一个二维数组的定义语句为"int a[3][4]={{3,4},{2,8,6}};",则元素a[2][1]的值为( )。 选择一项: a. 0 窗体底端 判断 窗体顶端 在执行"typedef int DataType;"语句后,标识符DataType与保留字int具有完全相同的含义和作用。(对) 窗体顶端 在switch语句中,每个case和冒号之间的表达式只能是常量。(对) 窗体顶端 为了结束本层循环类语句或switch语句的执行过程,在语句体中需要使用break语句。( 对) 窗体顶端 在程序中执行到break语句时,将结束所在函数的执行过程,返回到调用该函数的位置。 (错) 窗体顶端 在程序执行完成任一个函数调用后,将结束整个程序的执行过程,返回到操作系统或C语 言集成开发环境界面窗口。(错) 窗体顶端 假定一维数组的定义为"char* a[8];",则该数组所含元素的个数大于8(错) 假定二维数组的定义为"int a[3][5];",则该数组所占存储间的字节数为60。(对) 窗体顶端 假定二维数组的定义为"char a[M][N];",则该数组所含元素的个数为M+N。(错) 窗体底端 窗体顶端 假定二维数组的定义为"double a[M][N];",则每个数组元素的行下标取值范围在0~M- 1之间(对) 窗体顶端 假定二维数组的定义为"double a[M][N];",则每个数组元素的列下标取值范围在0~N之间。(错) 窗体顶端 存储一个字符串需要占用0个字节的存储间(错) 窗体顶端 使用"typedef char BB[10][50];"语句定义标识符BB为含有10行50列的二维字符数组类型(对) 窗体顶端 存储字符'a'需要占用1个字节的存储间。(对) 窗体顶端 字符串的长度为1。(错) 窗体底端 窗体顶端 字符串"a:\\xxk\\数据"的长度为13。(错) 窗体顶端 为了存储一个长度为n的字符串,所使用的字符数组的长度至少为n+1(对) strcmp函数用于进行两个字符串之间的比较(对) 窗体顶端 strcpy函数用于把一个字符串拷贝到另一个字符数组间中(对) 窗体顶端 一个二维字符数组a[10][20]能够最多存储9个字符串(错) 计算 窗体顶端 试题正文 #include<stdio.h> void main() { int x=5; switch(2*x-3) { case 4: printf("%d ",x); case 7: printf("%d ",2*x+1); case 10: printf("%d ",3*x-1); break; default: printf("%s","default\n"); } } 答案:8 20 窗体底端 计算提 窗体底端 窗体底端 1.窗体顶端 试题正文 编写一个函数,函数头格式为"double Mean(double a[M][N],int m,int n)",要求返回二维数组a[m][n]中所有元素的平均
CommonDialog 控件 CommonDialog 控件提供一组标准的操作对话框,进行诸如打开和保存文件,设置打印选项,以及选择颜色和字体等操作。通过运行 Windows 帮助引擎控件还能显示帮助。 语法 CommonDialog 说明 CommonDialog 控件在 Visual Basic 和 Microsoft Windows 动态链接库 ommdlg.dll. 的例程之间提供了一个接口。为了用这个控件创建一个对话框,ommdlg.dll. 必须在 Microsoft Windows 的 SYSTEM 目录下。 在应用程序中要使用 CommonDialog 控件,可将其添加到窗体中并设置其属性。控件所显示的对话框由控件的方法确定。在运行时,当相应的方法被调用时,将显示一个对话框或是执行帮助引擎;在设计时,CommonDialog 控件是以图标的形式显示在窗体中。该图标的大小不能改变。 使用指定的方法,CommonDialog 控件能够显示下列对话。 方法 所显示的对话框 ShowOpen 显示“打开”对话框 ShowSave 显示“另存为”对话框 ShowColor 显示“颜色”对话框 ShowFont 显示“字体”对话框 ShowPrinter 显示“打印”或“打印选项”对话框 ShowHelp 调用 Windows 帮助引擎 在对话框接口上单击,CommonDialog 控件将自动提供与上下文有关的帮助: 单击标题栏中的“这是什么?”帮助按钮,然后单击想详细信息的项目。 将鼠标放在想进一步详细信息的项目上,单击右键,然后在所显示的上下文菜单中选择这是什么命令。 操作系统提供在 Windows 95 帮助弹出中显示的文本。也可以通过设置 Flags 属性,在带有 CommonDialog 控件的对话框中显示一个帮助按钮,但是,必须在这个位置提供帮助主题。 注意 无法指定对话框显示在什么地方。 详细信息 要查看各对话的帮助主题,单击“请参阅”。 下例显示“打开”对话框然后在信息框中显示所选的文件名: Private Sub Command1_Click() ' 设置“CancelError”为 True CommonDialog1.CancelError = True On Error GoTo ErrHandler ' 设置标志 CommonDialog1.Flags = cdlOFNHideReadOnly ' 设置过滤器 CommonDialog1.Filter = "All Files (*.*)|*.*|Text Files" & _ "(*.txt)|*.txt|Batch Files (*.bat)|*.bat" ' 指定缺省的过滤器 CommonDialog1.FilterIndex = 2 ' 显示“打开”对话框 CommonDialog1.ShowOpen ' 显示选定文件的名字 MsgBox CommonDialog1.filename Exit Sub ErrHandler: ' 用户按了“取消”按钮 Exit Sub End Sub 参考资料:MSDN var fd = new ActiveXObject("MSComDlg.CommonDialog"); fd.Filter = "Microsoft Office Word(*.doc)|*.doc"; fd.FilterIndex = 2; // 必须设置MaxFileSize. 否则出错 fd.MaxFileSize = 128; // fd.FileName=document.all.FlSubject.value+thisform.WFStartTime.value.split(" ")[0];; // 显示对话框 fd.ShowSave(); 判断"取消"事件,可判断fd.flags为0,或fd.FileName为
摘要:本文通过一个程序实例描述了在VC++6.0下如何在单文档程序中通过菜单动态控制多 个窗体的切换。    一、 引言    我们在编制程序中根据需求的不同会在程序风格上选择多文档、单文档或是对话框模式 ,对于单文档模式可能是我们使用比较多的,但有时我们想采用单文档的形式显示多个不同 的窗体,如作为数据库前台应用程序就会遇到此类问题,数据库由大量的表单组成,而同常 一个窗体内只用来显示一个表单,所以要显示其他的表单时就要用到切换窗体的技术了,下 面就通过一个程序说明该技术的实现方法。    二、 实现技术    新建一个基于CFormView的单文档应用程序,再添加一个窗体和与之对应的基于 CFormView的新视类,然后通过在主框架类里添加控制代码和菜单控制实现这两个窗体的动态 切换,下面就是具体的实现过程:    (一) 用"MFC AppWizard(exe)"建立一个新项目"SwitchForm",并在第二步的创建类型上选 择为"Single documnet"单文档模式,第三、四、五、六步均取确省状态,最后一步选择 "CFormView"作为视类的基类。点按"完成"按钮,生成了初始工程"SwitchForm"。    (二) 点选菜单"Insert"、"Resource…",在弹出的"Insert Resource"对话框中"Dialog"树 里的"IDD_FORMVIEW",点击"New"按钮,生成了一个新的窗体,将其ID号改为"IDD_NEXTFORM"。 在原有的窗体上加一个静态框"这是第一个窗体";在新建的窗体上也添加一个静态框"这是第二 个窗体"。    (三) 在菜单资源的"IDR_MAINFRAME"上添加一级菜单"窗体切换",及其二级菜单"第一个窗 体"、"第二个窗体",其标识号分别为"ID_FIRSTFORM"和"ID_SECONDFORM"。修该"第一个窗体" 的属性为"Checked",表明程序初始时显示的是第一个窗体。    (四) 在"ClassView"属性页里的"SwitchForm classes"上右键,在弹出菜单上选择 "New Class…",弹出"New Class"对话框,选择"Dialog ID:"为我们刚添加的新窗体 "IDD_NEXTFORM",选择"Base class:"为"CFormView",类名取为"CNextFormView",这样就把第 二个窗体对应的视图类添加到了工程。 (五) 在框架类里添加函数SwitchToForm(): void CMainFrame::SwitchToForm(int nForm) { file://获取原来的活动窗体的视图句柄 CView* pOldActiveView = GetActiveView(); file://获取由"nForm"标识的窗体所对应的视图句柄 CView* pNewActiveView = (CView*) GetDlgItem(nForm); file://若视图句柄为,则创建一新的。 if (pNewActiveView == NULL) { if (nForm == IDD_SW99vCHFORM_FORM) pNewActiveView = (CView*)new CSwitchFormView; if (nForm == IDD_NEXTFORM) pNewActiveView = (CView*)new CNextFormView; CCreateContext context; context.m_pCurrentDoc = pOldActiveView->GetDocument(); pNewActiveView->Create(NULL,NULL,0L, CFrameWnd::rectDefault, this,nForm,&context); pNewActiveView->OnInitialUpdate(); } file://选择pNewActiveView为活动窗体 SetActiveView(pNewActiveView); file://显示活动窗体,隐藏非活动窗体 pNewActiveView->ShowWindow(SW_SHOW); pOldActiveView->ShowWindow(SW_HIDE); int ID; if(pOldActiveView->GetRuntimeClass() == RUNTIME_CLASS(CSwitchFormView)) ID=IDD_SW99vCHFORM_FORM; if(pOldActiveView->GetRuntimeClass() == RUNTIME_CLASS(CNextFormView)) ID=IDD_NEXTFORM; file://设置窗体的ID号 pOldActiveView->SetDlgCtrlID(ID); pNewActiveView->SetDlgCtrlID(AFX_IDW_PANE_FIRST); RecalcLayout(); }    (六)添加两个菜单相对应的命令响应函数和更新函数如下: void CMainFrame::OnFirstform() { file://通过IsKindOf函数确定当前活动窗口是否是第一个窗口,如是,则无须切换, file://否则将通过SwitchToForm函数将当前活动窗口切换到"IDD_SW99vCHFORM_FORM" file://标识的第二个窗体。 if (GetActiveView()->IsKindOf(RUNTIME_CLASS(CSwitchFormView))) return; SwitchToForm(IDD_SW99vCHFORM_FORM); } void CMainFrame::OnUpdateFirstform(CCmdUI* pCmdUI) { file://通过IsKindOf函数判断当前活动窗口是否是第一个窗体,如是则将其选中。 pCmdUI->SetCheck(GetActiveView()->IsKindOf(RUNTIME_CLASS(CSwitchFormView))); } void CMainFrame::OnSecondform() { if (GetActiveView()->IsKindOf(RUNTIME_CLASS(CNextFormView))) return; SwitchToForm(IDD_NEXTFORM); } void CMainFrame::OnUpdateSecondform(CCmdUI* pCmdUI) { pCmdUI->SetCheck(GetActiveView()->IsKindOf(RUNTIME_CLASS(CNextFormView))); }    然后再在该文件开始处添加对两个视图类的引用: #include "SwitchFormDoc.h" #include "SwitchFormView.h" #include "NextFormView.h"    在此须注意:应在两个视类的引用之前添加对文档类的引用,否则会引起编译错误。另外,由于视 类的构造函数在声明时都确省的声明为保护型的,在框架类中无法引用,所以还要将两个视类的类 声明改动如下: class CNextFormView : public CFormView { public: file://将protected 改为public. CNextFormView(); …… }; class CSwitchFormView : public CFormView { public: file://将protected 改为public. CSwitchFormView(); …… };    三、 编译运行    编译运行程序,开始时的窗体上有"这是第一个窗体的字样",菜单也只有"第一个窗体"是被选中的, 当前的活动窗体是第一个窗体;点击菜单"第二个窗体",视图中的窗体上的字样变成了"这是第二 个 窗体",同时选中的菜单也由"第一个窗体"变成了"第二个窗体",实现了通过菜单将窗体进行动态切换。    总结:此程序中关键的是SwitchToView函数,在此函数中,程序搜索所有当前文档的显示窗口来查找与CruntimeClass变量匹配的视图类。如果找到,该窗口被激活。通过与之类似的方法,还可以实现在多文档模式下的单档(文档)多视(视图),通过不同的视图以不同的方式显示来自同一份文档的数据,以更好的满足程序的需要。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值