概述
文章目录
- 0、补充
- 1、线程
- 2、操作win窗口
- 2.1、遇到的错误以及解决办法
- 3、窗口操作的其他姿势
- 3.1、创建父子窗口
- 3.2、模拟操作系统给窗口发消息
- 3.3、配置取消程序运行的黑窗口(可选)
0、补充
~程序运行时产生的黑窗口是可以隐藏的,具体过程可以百度谷歌
~在VC内,选择英文字母之后,
ctrl+u 全部变小写
ctrl+shift+u 全部变大写
1、线程
创建线程,要包含一个头文件:#include <process.h>
“void*”表示空地址,
“_beginthread”表示开启线程
14行的代码,是弹出一个框,显示后边具体的字符串,
直接运行,旷课弹出之后秒退,无法看到到底弹了几个框,
主要是主线程没有暂停,一会就挂了,子线程自然也挂了;在主线程加一个“暂停”
再次运行,发现弹了5个框。这也是并发的好处,
这里有一个报错,如图所示。原因是这个地方选择的“x86”,改为“x64”解决,
2、操作win窗口
先打开电脑计算器,在打开这个Spy++,
按照图中箭头依次点击,可以获取到计算器这个窗口的标题与类(名称),下边的句柄会用到。
写一个程序来判断,电脑界面上有没有打开计算器这个窗口,假设找到了,则做一个闪烁效果,
没找到则弹出一个友好提示框,并返回一个错误。
HWND是“句柄”即指针,后边两个参数一个是计算器的类名称,另一个是标题。
11行,没找到对应的计算器窗口弹出一个友好的提示窗口
12行,返回-1(错误) 、、貌似0或者不写也可以
16行,将窗口隐藏;参数为句柄、对应操作
17行,延时500毫秒
18行,将窗口显示
直接运行,计算器打开了但是并没闪烁。
没有弹框提示说明找到了,这个是我们没有使用循环,直接加一个死循环。
再次运行就会出现计算器一闪一闪的效果。
2.1、遇到的错误以及解决办法
运行程序报下边的错误,将30行的单引号改为双引号即可。
笔者理解:
这里主要是因为C语言之中,单引号一般只能用来包含‘ 字符 ’,
对于字符串只能使用双引号来包含
3、窗口操作的其他姿势
3.1、创建父子窗口
新建一个项目,选择“MFC应用”,
假设没有参考安装,https://blog.csdn.net/qq_35392239/article/details/109190131
“基于对话框”,
这里没有“类资源图”的话,快捷键“ctrl+shift+e”;或者“视图”--“其他窗口”--“资源视图”,
写入自己的代码,点击生成,
找到程序,点击按钮,弹出指定内容。
来简述下这个原理,其本质就是一个死循环,一直监听鼠标有没有点击对应的按钮。
假设鼠标点击了,就弹窗。
但是电脑上有很多的应用都在监听鼠标和键盘等资源,这样不会乱吗,或者说谁的优先级更高呢?
这一切其最底层都是由“操作系统”来监听。这个过程被称为“消息机制”
操作系统来监听鼠标和键盘的动作,然后将监听到的动作发给不同在监听窗口的应用。
额外说明下,上述我们创建的窗口最外部是父窗口,里边“button1”是子窗口,
3.2、模拟操作系统给窗口发消息
了解这个原理,可以推出,我们是否可以“模拟”操作系统给对应正在监听的窗口发“假消息”呢?
使用spy++获取子窗口信息(标题+类)
在获取下父窗口,父窗口因为我们没有给标题信息,所以只显示有一个类。
在上边提到的程序,魔改下,
10行找到父窗口。具体函数每个参数是什么作用可以去百度找下。
11行是找到子窗口,注意的是这个寻找子窗口的函数,使用的是“增强版查找”,
这里多说下,不能直接寻找子窗口(会找不到),(貌似)只能通过父窗口寻找。
然后经过测试,这个不写父窗口的标题,无法找到。
返回VS,给父窗口加一个标题。
下图的属性,可以在布局之中,右击“属性”;
假设打开的是中文版本,则"Caption"对应的是“描述文字”
然后保存,重新生成,然后还是没有找到。最后忽略类名找到的,
最终的效果是,先手动打开刚刚新建的窗口,然后运行该程序会关闭掉新打开的窗口。
接下来,尝试操作子窗口;找到子窗口来关闭子窗口,
先打开这个exe,然后运行程序,看看效果。
当程序跑起来之后,这个按钮直接消失了。
当然,除了模拟发送关闭窗口的指令,还可以模拟点击该按钮的功能,
改下指令就好了
,
双击生成的exe,
禁用按钮,
生成demo1并运行,程序的按钮直接变黑。
过了3秒,又可以点击了,
3.3、配置取消程序运行的黑窗口(可选)
有这个黑窗口还是太烦,配置下,
第二处配置,
最后
以上就是虚拟铃铛为你收集整理的C语言(2)多线程与简单操作应用窗口的全部内容,希望文章能够帮你解决C语言(2)多线程与简单操作应用窗口所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复