社区
Delphi
帖子详情
续问题 id=5385 ,怎样判断一个窗体是否是窗体
Firing_Sky
2000-03-25 01:56:00
我捕获的窗口句柄是属于另一个应用程序的,我怎么才能判断它是否是Form,更进一步,我希望能操作另一个应用程序的菜单……应该怎么办?
...全文
147
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等等吧,再学习它就会简单的多。当然大家也不用担心,即使没学过,在学习了该教程提供的Python的Tkinter
窗体
后,也会让你快速的掌握。这样我们就可以使用Python做一些小游戏,或者做一些小系统。
在单文档程序中动态切换多个
窗体
的源码程序
摘要:本文通过
一个
程序实例描述了在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,388
社区成员
262,730
社区内容
发帖
与我相关
我的任务
Delphi
Delphi 开发及应用
复制链接
扫一扫
分享
社区描述
Delphi 开发及应用
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章