Visual C++编程技巧之一

怎样用C/C++开发图形界面(GUI)程序——点名器示例 怎样用C/C++开发图形界面(GUI)程序——点名器示例 原文链接:https://mp.weixin.qq.com/s/O9PXaibAyd__ONBBASYI_Q 仍旧是Via What系列,昨天熬夜读了FLTK的文档,今天终于可以给大家介绍一下了。为什么首选这个GUI框架来介绍,个人感觉它有下面几个好处: GUI开发的急救之章 对刚开始开发GUI程序的同学比较友好 文档完整详实 不需要依赖其它杂七杂八的东西 如果你也受够了每次写出的程序只有DOS那个黑框,或是想开发自己的GUI工具,亦或是对GU 阅读详情

Visual C++编程技巧之一

 

1. 如何获取应用程序的实例句柄?

2. 如何通过代码获得应用程序主窗口的指针?

3.如何在程序中获得其他程序的 图标?

4.如何编程结束应用程序?如何编程控制windows的重新引导?

5.怎样加栽其他的应用程序?

6. 确定应用程序的 路径

7. 获得各种目录信息

8. 如何自定义消息

 

1. 如何获取应用程序的实例句柄?

应用程序的 实例句柄保存在CWinAppIm_hInstance 中,可以这么调用

AfxGetInstancdHandle获得句柄.

Example: HANDLE hInstance=AfxGetInstanceHandle();

2. 如何通过代码获得应用程序主窗口的指针?

主窗口的 指针保存在CWinThread::m_pMainWnd中,调用 AfxGetMainWnd实现。

AfxGetMainWnd() ->ShowWindow(SW_SHOWMAXMIZED); //使程序最大化.

3.如何在程序中获得其他程序的 图标?

两种方法:

(1) SDK函数 SHGetFileInfo 或使用 ExtractIcon获得图标资源的 handle,

(2) SDK函数 SHGetFileInfo获得有关文件的 很多信息,如大小图标,属性,类型等.

Example(1): 在程序窗口左上角显示 NotePad图标.

void CSampleView: OnDraw(CDC * pDC)

{

if( :: SHGetFileInfo(_T("c://pwin95//notepad.exe"),0,

&stFileInfo,sizeof(stFileInfo),SHGFI_ICON))

{

pDC ->DrawIcon(10,10,stFileInfo.hIcon);

}

}

Example(2):同样功能,Use ExtractIcon Function

void CSampleView:: OnDraw(CDC *pDC)

{

HICON hIcon=:: ExtractIcon(AfxGetInstanceHandle(),_T

("NotePad.exe"),0);

if (hIcon &&hIcon!=(HICON)-1)

pDC->DrawIcon(10,10,hIcon);

}

说明: 获得notepad.exe的路径正规上来说用GetWindowsDirectory 函数得到,如果是调用 win95下的画笔,应该用访问注册表的方法获得其路径,要作成一个比较考究的程序,考虑应该全面点.

4.如何编程结束应用程序?如何编程控制windows的重新引导?

这是个很简单又是编程中经常要遇到的问题.

第一问,向窗口发送 WM_CLOSE消息,调用 CWnd::OnClose成员函数.允许对用户提示

是否保存修改过的数据.

Example: AfxGetMainWindow()->SendMessage(WM_CLOSE);

还可以创建一个自定义的函数 Terminate Window

void Terminate Window(LPCSTR pCaption)

{

CWnd *pWnd=Cwnd::FindWindow(NULL,pCaption);

if (pWnd)

pWnd ->SendMessage(WM_CLOSE);

}

说明: FindWindow函数不是提倡的做法,因为它无法处理标题栏自动改变,比如我们要检测 Notepad是不是已运行而事先不知道Notepad的标题栏,这时 FindWindow就无能为力了,可以通过枚举 windows任务列表的办法来实现。 在 机械出版社"Windows 95 API开发人员指南"一书有比较详细的介绍,这里就不再多说乐。

第二问,Use ExitWindowsEx Function函数控制系统是重新引导,还是重启 windows.前面已经有人讲过乐,就不再提了。

5.怎样加栽其他的应用程序?

我记得这好象是出场频度很高的问题。

三个SDK函数 winexec, shellexecute,createprocess可以使用。

WinExec最简单,两个参数,前一个指定路径,后一个指定显示方式.后一个参数值得说一下,比如泥用 SW_SHOWMAXMIZED方式去加栽一个无最大化按钮的 程序,呵呵就是Neterm,calc等等,就不会出现正常的 窗体,但是已经被加到任务列表里了。ShellExecute较 WinExex灵活一点,可以指定工作目录,下面的 Example就是直接打开 c:/temp/1.txt,而不用加栽与 txt文件关联的应用程序,很多安装程序完成后都会打开一个窗口,来显示Readme or Faq,偶猜就是这么作的啦.

ShellExecute(NULL,NULL,_T("1.txt"),NULL,_T("c://temp"),SW_SHOWMAXMIZED);

CreateProcess最复杂,一共有十个参数,不过大部分都可以用NULL代替,它可以指定进程的安全属性,继承信息,类的优先级等等.来看个很简单的 Example:

STARTUPINFO stinfo; //启动窗口的信息

PROCESSINFO procinfo; //进程的信息

CreateProcess(NULL,_T("notepad.exe"),NULL,NULL.FALSE, NORMAL_PRIORITY_

CLASS,NULL,NULL, &stinfo,&procinfo);

6. 确定应用程序的 路径

前些天好象有人问过这个问题.

Use GetModuleFileName 获得应用程序的路径,然后去掉可执行文件名。

Example:

TCHAR exeFullPath[MAX_PATH]; // MAX_PATH在API中定义了吧,好象是128

GetModuleFileName(NULL,exeFullPath,MAX_PATH)

7. 获得各种目录信息

Windows目录: Use "GetWindowsDirectory“

Windows下的system目录: Use "GetSystemDirectory"

temp目录: Use "GetTempPath "

当前目录: Use "GetCurrentDirectory"

请注意前两个函数的第一个参数为 目录变量名,后一个为缓冲区; 后两个相反.

8. 如何自定义消息

也有人问过的,其实不难。

(1) 手工定义消息,可以这么写 #define WM_MY_MESSAGE(WM_USER+100),

MS 推荐的至少是 WM_USER+100;

(2)写消息处理函数,用 WPARAM,LPARAM返回LRESULT.

LRESULT CMainFrame::OnMyMessage(WPARAM wparam,LPARAM lParam)

{

//加入你的处理函数

}

(3) 在类的 AFX_MSG处进行声明,也就是常说的"宏映射"

 


浅谈图形界面引擎开发 - 如何用 C++ 从零编写 GUI 本人在知乎上关于 如何用 C++ 从零编写 GUI? 问题的回答,算是比较粗浅但全面的讲解了GUI引擎的一些开发心得 阅读详情

相关推荐

[自己总结+网上流传]Visual C++编程技巧

1. 如何获取应用程序的实例句柄?应用程序的 实例句柄保存在CWinAppIm_hInstance 中,可以这么调用AfxGetInstancdHandle获得句柄.Example: HANDLE hInstance=AfxGetInstanceHandle();2. 如何通过代码获得应用程序主窗口的指针?主窗口的 指针保存在CWinThread::m_pMainWnd中,调用 AfxGetMai

宋雷的技术博客 5116

C++ GUI 选型&编译

1、8个免费实用的C++GUI库 https://www.cnblogs.com/dongsheng/articles/3335799.html   计划选wxWidgets 最为GUI的开发框架     2、wxWidgets:mac下搭建wxWidgets 3.0 环境 https://blog.youkuaiyun.com/freewebsys/article/details/456438...

zhanyong168的专栏 1687

全面掌握Visual C++网络编程高级技巧

TCP/IP 协议族定义了网络通信过程中的基本结构,这套结构被分为四层,分别为:链路层、网络层、传输层和应用层。每一层都有其特定的功能和协议,使得复杂的数据通信过程变得条理清晰。链路层:负责在相邻网络节点之间的帧传输。常见的协议有以太网(Ethernet)、Wi-Fi等。网络层:管理数据包在网络中的传输路径,IP协议是该层的核心。它负责把数据包路由到最终目的地。传输层:主要负责的是数据包的传输,包括端到端的连接建立和数据传输管理。

weixin_42462474的博客 666

【Visual C++】游戏开发五十六 浅墨DirectX教程二十三 打造游戏GUI界面(一)

本系列文章由zhmxy555(毛星云)编写,转载请注明出处。 作者:毛星云(浅墨) 邮箱: happylifemxy@163.com众所周知,GUI是游戏中不可缺少的元素,这篇文章中,我们首先了解了游戏GUI界面的知识与相关概念,然后一起设计了一个封装好GUI图形界面的C++类。这个类有着非常强的扩展性,使用也是极其方便,很适合二次开发。先看一张实现的效果图吧:其中的背...

weixin_34228662的博客 892

Visual C++编程实践:核心概念与技巧全解

本文还有配套的精品资源,点击获取 简介:Visual C++(VC++)是微软推出的集成开发环境,主要用于编写C++程序。本文深入探讨了VC++的关键知识点和实用技巧,包括IDE使用、MFC、源码管理、编译与链接、调试技巧、异常处理、多线程编程、预处理指令、模板和泛型编程、STL、资源文件处理、性能优化、错误和日志记录、国际化与本地化及文档与注释等,以帮助开发者提升编程效率...

weixin_42578963的博客 931

rv1106 模型部署

ONNX(Open Neural Network Exchange),开放神经网络交换,是一种模型IR,用于在各种深度学习训练和推理框架转换的一个中间表示格式,支持多种深度学习框架,包括 TensorFlow、PyTorch、Caffe 等。将模型转换为 ONNX 格式后,可以更容易地在不同的深度学习框架中进行部署和推理,而无需重新训练模型。

weixin_50993868的博客 1286

Visual C++编程技巧精选500例.pdf

Visual C++编程技巧精选500例.pdf 去发现同类优质开源项目:https://gitcode.com/ 《Visual C++编程技巧精选500例》是一本深入浅出的Visual C++编程指南,内容涵盖了消息框、常用控件、通用对话框、标题栏与菜单栏、工具栏与状态栏、图标与光标、程序窗口、线程、字符串、文件读写操作、文件与文件夹属性操作、文件与文件夹系统操作、系统控制操作、程序版权信息、...

gitblog_06794的博客 916

动态库加载失败终极指南:从libbz2.so.1错误看Linux依赖管理本质

本文以经典的libbz2.so.1加载错误为例,深入剖析Linux动态链接库管理的核心机制。文章不仅提供从ldd检查、符号链接创建到LD_LIBRARY_PATH设置等实战解决方案,更系统性地讲解了动态链接器的寻库路径、版本管理及依赖问题预防策略,帮助开发者从根本上理解和掌握Linux依赖管理本质。

weixin_29212429的博客 447

Visual C++ 编程技巧精选500例 - [罗斌].pdf 下载仓库

Visual C++ 编程技巧精选500例 - [罗斌].pdf 下载仓库 去发现同类优质开源项目:https://gitcode.com/ 资源介绍 本仓库提供了一个资源文件的下载,文件名为 Visual C++ 编程技巧精选500例 - [罗斌].pdf。该文件是一本关于Visual C++编程技巧的精选集,由罗斌编写,收录了500个实用的编程技巧,适合Visual C++开发者学习和参考。 ...

gitblog_06634的博客 513

INCA刷写App文件必看:A2l文件配置与ProF文件安装详解(2023最新版)

本文深入解析了使用INCA进行ECU应用程序刷写时,A2l文件配置与ProF文件安装的关键细节与避坑指南。重点阐述了A2l文件必须与待刷写二进制文件严格匹配的核心逻辑,以及ProF文件与Bootloader版本强相关的安装策略,帮助开发者解决刷写过程中的常见失败问题,确保刷写流程的稳定与可靠。

milk8的博客 591

小孙学变频学习笔记(二)变频器的逆变电路

本文主要介绍了变频器中逆变电路的核心器件IGBT及其应用。IGBT是一种电压控制型三端半导体开关器件,具有开关频率高、功耗低的优点,在变频器中仅使用截止和饱和导通状态。文章详细分析了IGBT的结构特性、与晶闸管的区别,以及由四个IGBT组成的直流转交流逆变电路原理。重点阐述了IGBT并联反向二极管的作用:提供电流反向通路、避免反向电压损坏器件、提高开关效率等。最后提供了相关学习参考网址供读者进一步研究。

qq_43091070的博客 1196

Visual C++编程的若干技巧

                                      Visual C++编程的若干技巧  Visual C++是一种面向对象的可视化编程工具,它提供的AppWizard能自动生成应用程序的标准框架,大大减轻了编程的工作量。本文主要介绍如下的编程技巧:修改主窗口风格、创建不规则形状窗口、用鼠标单击窗口标题条以外区域移动窗口、使用上下文菜单、使应用程序只能运行一个实例、使应

iBreathe的专栏 1359

goahead(嵌入式Web服务器)之openssl 应用篇

1、环境配置 在me.h文件里修改以下宏定义 ME_COM_MBEDTLS 0 ME_COM_MATRIXSSL 0 ME_COM_NANOSSL 0 ME_COM_OPENSSL 1 2、添加 goahead-openssl.c goahead-openssl.c这个文件在有些goahead源码中是没有的,后面的章节中会提供openssl应用测例 3、依赖的库 goahead的openssl 应用需要依赖libssl.a与libcrypto.a(libssl.so与libcrypto.so)两个库,做好

weixin_40732273的博客 2089

基于Visual C++的钩子编程技巧

基于Visual C++的钩子编程技巧钩子概述  钩子(Hook)是Windows消息处理机制的一个要点(Point)。应用程序可以通过钩子机制截获处理Window消息或是其他一些特定事件。同DOS中断截获处理机制类似,应用程序可以在钩子上设置多个钩子函数,由其组成一个与钩子相关联的指向钩子函数的指针列表(钩子链表)。当钩子所监视的消息出现时,Windows首先将其送到调用链表中所指向

dongliqiang2006的专栏 632

【YOLO11改进 - C3k2融合】C3k2融合DWRSeg二次创新C3k2_DWR:扩张式残差分割网络,提高特征提取效率和多尺度信息获取能力,助力小目标检测

【YOLO11改进 - C3k2融合】C3k2DWRSeg二次创新C3k2_DWR:扩张式残差分割网络,提高特征提取效率和多尺度信息获取能力,助力小目标检测

专注于图像领域,主要研究内容包括计算机视觉和深度学习,特别是在图像分类、目标检测和图像生成等方面有深入的研究和实践经验。 1055

excel 如何自动调整行间距 vba

EXCEL是一个非常使用的软件,虽然我们平时仅使用他做一些报表,仅此而已;我在工作中,由于很懒,不愿意做考试重复的工作,就想着使用vba的宏来完成重复的工作,这样就能省出一部分的时间来了。本人不喜欢在博客里面写以下教程类的东西,我的理念是将工作中的痛点的解决办法分享出来,以解决问题为主。

sixtome 1316

Windows 程序开发 Visual C++编程技巧之zz

http://blog.youkuaiyun.com/devzhao/category/34452.aspxVisual C++编程技巧之六 http://blog.youkuaiyun.com/devzhao/articles/243363.aspx

weixin_33948416的博客 99

【MicroPython编程-ESP32篇:设备驱动】-SHT31温度湿度传感器驱动

SHT31 是 Sensirion 的下一代温湿度传感器。 它建立在一个新的 CMOSens® 传感器芯片之上,该芯片是 Sensirion 新湿度和温度平台的核心。

视觉与物联智能 229

【亲测免费】 Visual C++ 编程技巧精选500例:提升开发效率的必备宝典

Visual C++ 编程技巧精选500例:提升开发效率的必备宝典 去发现同类优质开源项目:https://gitcode.com/ 项目介绍 在软件开发的世界里,掌握高效的编程技巧是每个开发者追求的目标。为了帮助广大Visual C++开发者提升编程效率和代码质量,我们特别推出了《Visual C++ 编程技巧精选500例 - [罗斌].pdf》下载仓库。这个仓库提供了一本由资深开发者罗斌编写的...

gitblog_06692的博客 371

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Visual C++编程技巧

导读:   转自:优快云   Visual C++编程技巧 (这些问题可能在优快云里经常被人问到,现在列出来供大家参考,欢迎大家一起来完善之)   1. 如何获取应用程序的实例句柄?   应用程序的 实例句柄保存在CWinAppIm_hInstance 中,可以这么调用   AfxGetInstancdHandle获得句柄.   Example: HANDLE hInstance=AfxGet

zlf0727的专栏 768

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Visual C++编程技巧 (1)

导读:   Visual C++编程技巧 (这些问题可能在优快云里经常被人问到,现在列出来供大家参考,欢迎大家一起来完善之)   1. 如何获取应用程序的实例句柄?   应用程序的 实例句柄保存在CWinAppIm_hInstance 中,可以这么调用   AfxGetInstancdHandle获得句柄.   Example: HANDLE hInstance=AfxGetInstan

happy5856的专栏 1551

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

Visual C++编程技巧精选500例资源下载说明:编程技能提升利器

Visual C++编程技巧精选500例资源下载说明:编程技能提升利器 去发现同类优质开源项目:https://gitcode.com/ 项目介绍 《Visual C++编程技巧精选500例》是一个专为提升Visual C++编程技能而设计的资源集合。本资源集合汇聚了500个精心挑选的编程实例,从基础的控件应用到高级的图形图像处理,内容全面,适合各层次的开发者学习和实践。 项目技术分析 《Visu...

gitblog_06779的博客 320
上一篇: c#合成带参url
下一篇: Visual C++ 编程技巧之二
0x16
博客等级 码龄20年 79粉丝 50原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值