社区
Delphi
帖子详情
续问题 id=5385 ,怎样判断一个窗体是否是窗体
Firing_Sky
2000-03-25 01:56:00
我捕获的窗口句柄是属于另一个应用程序的,我怎么才能判断它是否是Form,更进一步,我希望能操作另一个应用程序的菜单……应该怎么办?
...全文
150
5
打赏
收藏
续问题 id=5385 ,怎样判断一个窗体是否是窗体
我捕获的窗口句柄是属于另一个应用程序的,我怎么才能判断它是否是Form,更进一步,我希望能操作另一个应用程序的菜单……应该怎么办?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
5 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
olo
2000-03-27
打赏
举报
回复
听听
Un1
2000-03-26
打赏
举报
回复
如果仅仅是操作菜单的话,知道hwnd之后还有什么搞不定?!
Lin
2000-03-25
打赏
举报
回复
Firing_Sky:
1、问题答案见http://www.csdn.net/expert/TopicView.asp?id=5325
2、问题答案见http://www.csdn.net/expert/TopicView.asp?id=5585
kxy
2000-03-25
打赏
举报
回复
delphi中,例如 var aform : taform
afrom 是一个引用,指向一片内寸。
对其他的应用程序,窗口就是TForm,但是,这个Form的代码大小,数据的位置
等等你是无法知道的,如果你把它强制转化会内寸崩溃的。
例如,delphi中你写了 TForm1,TForm2,两者不同,
有两个变量 Form1,Form2 你能这样操作吗
Form2 := TForm2.Create(Application); //假设form2中有Menu1
Form1 := Form2;
TForm2(Form1).Menu1 ; //???
form2类似其他程序的窗口。
所以,要控制其他程序要使用windowsAPI的东西。
kxy
2000-03-25
打赏
举报
回复
只能使用windows API的函数,
用可以看exe资源的程序找出菜单的ID, 用windowsAPI的函数来控制,
向它发消息,SendMessage(hwnd,WM_COMMAND,iD,0);
或者,把另一个程序子类化,或者使用HOOK.
TForm只是在delphi中有用,
窗
体
传值-1
两个子
窗
体
之间的传值实例。主
窗
体
弹出两个子
窗
体
,从主
窗
体
f1输入字符串,f2随即显示输出字符串。为参考学习用的实例。 1.该实例的test和test2后缀并不是表示有一个实例系列,仅代表我自己测试过程中新建的项目编号。 2.本人仅是新人大菜鸟。该实例是本人需要解决实际
问题
,在论坛上提出的,最后在大大们的帮助下完成。 希望能通过这个实例,给其他新人带来福利。谢谢!
c# WinForm
窗
体
之间传值的几种方式(小结)
前言 小编最近维护一个Winfrom
窗
体
,是项目中CS端的主
窗
体
,很多子
窗
体
需要从主
窗
体
获取值,同时子
窗
体
还需要给主
窗
体
回传值,下面来给大家介绍一下。 正文 本文中以主
窗
体
为frmMain,子
窗
体
为frmGroup ,两
窗
体
之间的传值来做示例。 方式一: 使用公共静态变量传值 主
窗
体
frmMain中代码 public partial class frmMain : Form { //声明工位
ID
为公共静态变量 public static string terminal
ID
= ; //给静态变量赋值 terminal
ID
= q13bh01-bh12; } 子
窗
体
Python Tkinter
窗
体
讲解
Python作为自立门户的语言,除了学习它的基础编程之外,它还提供了
窗
体
的学习,这样相对来说,它就完整了,如果大家学习过C#
窗
体
实现或者Java,MFC等等吧,再学习它就会简单的多。当然大家也不用担心,即使没学过,...
在单文档程序中动态切换多个
窗
体
的源码程序
摘要:本文通过一个程序实例描述了在VC++6.0下如何在单文档程序中通过菜单动态控制多 个
窗
体
的切换。 一、 引言 我们在编制程序中根据需求的不同会在程序风格上选择多文档、单文档或是对话框模式 ,对于单文档模式可能是我们使用比较多的,但有时我们想采用单文档的形式显示多个不同 的
窗
体
,如作为数据库前台应用程序就会遇到此类
问题
,数据库由大量的表单组成,而同常 一个
窗
体
内只用来显示一个表单,所以要显示其他的表单时就要用到切换
窗
体
的技术了,下 面就通过一个程序说明该技术的实现方法。 二、 实现技术 新建一个基于CFormView的单文档应用程序,再添加一个
窗
体
和与之对应的基于 CFormView的新视类,然后通过在主框架类里添加控制代码和菜单控制实现这两个
窗
体
的动态 切换,下面就是具
体
的实现过程: (一) 用"MFC AppWizard(exe)"建立一个新项目"SwitchForm",并在第二步的创建类型上选 择为"Single documnet"单文档模式,第三、四、五、六步均取确省状态,最后一步选择 "CFormView"作为视类的基类。点按"完成"按钮,生成了初始工程"SwitchForm"。 (二) 点选菜单"Insert"、"Resource…",在弹出的"Insert Resource"对话框中"Dialog"树 里的"
ID
D_FORMVIEW",点击"New"按钮,生成了一个新的
窗
体
,将其
ID
号改为"
ID
D_NEXTFORM"。 在原有的
窗
体
上加一个静态框"这是第一个
窗
体
";在新建的
窗
体
上也添加一个静态框"这是第二 个
窗
体
"。 (三) 在菜单资源的"
ID
R_MAINFRAME"上添加一级菜单"
窗
体
切换",及其二级菜单"第一个
窗
体
"、"第二个
窗
体
",其标识号分别为"
ID
_FIRSTFORM"和"
ID
_SECONDFORM"。修该"第一个
窗
体
" 的属性为"Checked",表明程序初始时显示的是第一个
窗
体
。 (四) 在"ClassView"属性页里的"SwitchForm classes"上右键,在弹出菜单上选择 "New Class…",弹出"New Class"对话框,选择"Dialog
ID
:"为我们刚添加的新
窗
体
"
ID
D_NEXTFORM",选择"Base class:"为"CFormView",类名取为"CNextFormView",这样就把第 二个
窗
体
对应的视图类添加到了工程。 (五) 在框架类里添加函数SwitchToForm(): vo
id
CMainFrame::SwitchToForm(int nForm) { file://获取原来的活动
窗
体
的视图句柄 CView* pOldActiveView = GetActiveView(); file://获取由"nForm"标识的
窗
体
所对应的视图句柄 CView* pNewActiveView = (CView*) GetDlgItem(nForm); file://若视图句柄为空,则创建一新的。 if (pNewActiveView == NULL) { if (nForm ==
ID
D_SW99vCHFORM_FORM) pNewActiveView = (CView*)new CSwitchFormView; if (nForm ==
ID
D_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_H
ID
E); int
ID
; if(pOldActiveView->GetRuntimeClass() == RUNTIME_CLASS(CSwitchFormView))
ID
=
ID
D_SW99vCHFORM_FORM; if(pOldActiveView->GetRuntimeClass() == RUNTIME_CLASS(CNextFormView))
ID
=
ID
D_NEXTFORM; file://设置
窗
体
的
ID
号 pOldActiveView->SetDlgCtrl
ID
(
ID
); pNewActiveView->SetDlgCtrl
ID
(AFX_
ID
W_PANE_FIRST); RecalcLayout(); } (六)添加两个菜单相对应的命令响应函数和更新函数如下: vo
id
CMainFrame::OnFirstform() { file://通过IsKindOf函数确定当前活动
窗
口
是否
是第一个
窗
口,如是,则无须切换, file://否则将通过SwitchToForm函数将当前活动
窗
口切换到"
ID
D_SW99vCHFORM_FORM" file://标识的第二个
窗
体
。 if (GetActiveView()->IsKindOf(RUNTIME_CLASS(CSwitchFormView))) return; SwitchToForm(
ID
D_SW99vCHFORM_FORM); } vo
id
CMainFrame::OnUpdateFirstform(CCmdUI* pCmdUI) { file://通过IsKindOf函数
判断
当前活动
窗
口
是否
是第一个
窗
体
,如是则将其选中。 pCmdUI->SetCheck(GetActiveView()->IsKindOf(RUNTIME_CLASS(CSwitchFormView))); } vo
id
CMainFrame::OnSecondform() { if (GetActiveView()->IsKindOf(RUNTIME_CLASS(CNextFormView))) return; SwitchToForm(
ID
D_NEXTFORM); } vo
id
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变量匹配的视图类。如果找到,该
窗
口被激活。通过与之类似的方法,还可以实现在多文档模式下的单档(文档)多视(视图),通过不同的视图以不同的方式显示来自同一份文档的数据,以更好的满足程序的需要。
C#中关于
窗
体
进程通信的唯一性
考虑前提:1.
窗
体
进程开始后,再又一次打开该
窗
体
的时候,我们的Main函数会去打开该
窗
体
(即开始运行该进程,而此时我们已经在进程表中存在该进程(该进程
ID
已经存在),此时我们会去返回当前正在运行的进程,而不再重新开启该进程。 2.当用户在开启了该进程后,把对应生成的exe文件更改对应应用程序名称后,则打开该
窗
体
后的进程会是另一个进程,可以在进程表中发现其进程
ID
会被操作系统重新生成一个新的进程
ID
,但我们的应用程序在该进程打开的时候,会在其打开的时候去
判断
其打开
窗
体
的主
窗
体
名与该对应的进程的主
窗
体
的名句
是否
一致,如果完全一致,则可能是用户更改了对应的应用程序名所致,此时我们可以返回该正在运行的进程。
Delphi
5,392
社区成员
262,732
社区内容
发帖
与我相关
我的任务
Delphi
Delphi 开发及应用
复制链接
扫一扫
分享
社区描述
Delphi 开发及应用
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章