Windows 程序设计
文章平均质量分 50
关于Windows开发实战,VC / MFC / wxWdigets
hellokandy
我总在牛A与牛C之间徘徊!
展开
-
vs2008 fatal error C1083: 无法打开包括文件:“atlapp.h”: No such file or directory
一般情况下,只需要保留压缩包里的 include文件夹即可。把include文件夹解压到某个目录(比如说你的vs安装目录:C:\Program Files\Microsoft Visual Studio 9.0),然后在编译器中设置头文件包含目录就可以了原创 2024-01-10 09:25:54 · 659 阅读 · 0 评论 -
VC++ 屏蔽按ENTER或者ESC键退出程序
通过重载PreTranslateMessage函数屏蔽回车和ESC的消息。关于PreTranslateMessage函数: MFC消息控制流最具特色的地方是CWnd类的虚拟函数PreTranslateMessage(),通过重载这个函数,我们可以改变MFC的消息控制流程,甚至可以作一个全新的控制流出来。只有穿过消息队列的消息才受PreTranslateMessage()影响,采原创 2016-02-22 09:50:30 · 2646 阅读 · 0 评论 -
VC 发音函数Beep()的简单示例
Win32 API中有个非常有意思的发音函数Beep(),可以用它在扬声器上播放简单的音调,如果按简谱来设置播放的内容,就可以播放一些简单的音乐了。函数原型:WINBASEAPIBOOLWINAPIBeep( __in DWORD dwFreq, __in DWORD dwDuration );函数说明:第一个参数表示频率,用Hz为单位转载 2017-06-28 19:49:25 · 2044 阅读 · 0 评论 -
VC/MFC 实现文件拖拽获取文件名(WM_DROPFILES)
本文实现的是:拖拽文件到对话框(MFC)的编辑框,然后在编辑框中显示文件名。首先说一下我的失败经历:操作系统环境:win10,VS版本:Visual Studio 10,无论程序是基于单文档的还是对话框的,都不能实现文件拖拽。难道是VS10的问题?或者是没有用“管理员权限”启动导致的原因?经过多次尝试后,决定换VS08试试!代码完全一样,结果在VS08下可以实现文件拖拽。神马问题?原创 2016-11-29 11:49:42 · 4358 阅读 · 1 评论 -
VC 从外部文件中加载图片
我们知道,Visual C++的 CBitmap 类和静态图片控件的功能是比较弱的,它只能显示出在资源中的图标、位图、光标以及图标文件的内容。因此,想要在对话框或其他窗口中显示外部图像文件则只能借助于第三方提供的控件或代码。MFC 和 ATL 共享的新类CImage 为图像处理提供了许多相应的方法。 CImage类概述 CImage是MFC和ATL共享的新类,它能从外部磁盘原创 2017-01-11 10:35:24 · 2998 阅读 · 0 评论 -
VC 实现注册表监控
监视HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run项 #include //定义一个监视注册表启动项的函数int reg(){ HANDLE hNotify; HKEY hKeyx; //DWORD dwRes; hNotify = CreateEvent(NULL,转载 2017-06-18 15:04:50 · 1462 阅读 · 0 评论 -
VC实现当前程序退出后重启
所谓重启就是杀死系统的当前进程,然后重新开一个新进程。 ::PostMessage(AfxGetMainWnd()->m_hWnd,WM_SYSCOMMAND,SC_CLOSE,NULL); //获取exe程序当前路径 TCHAR szAppName[MAX_PATH]; :: GetModuleFileName(NULL, szAppName, MAX_PATH); std::原创 2016-04-12 19:45:02 · 2586 阅读 · 0 评论 -
VC6 到 VS2008 的问题
直接用Visual Studio 2008的打开VC6的工作区文件和项目文件(dsw和dsp),并将其升级为VS2008的解决方案格式和项目格式(sln和vcproj),VC9的编译器相对于VC6有了很大的变化,一些编译参数和链接参数被废弃(比如/map:line),有一些改变了名称,还有新增的选项,不过不用担心,升级过程会自动对其进行转换,最终都会得到一个正确的解决方案和VC项目文件,这个过程不转载 2017-12-19 12:50:28 · 726 阅读 · 0 评论 -
MFC 获取App,Doc,MainFrame,View指针
【SDI】:得到MainFrame的指针(pMainFrame) : AfxGetApp()->m_pMainWnd; 或 AfxGetMainWnd(); 或 AfxGetApp()->GetMainWnd(); 得到View的指针(pView):pMainFrame->GetActiveView();得到Document类的指针(pDoc):pMainFram原创 2016-08-12 22:40:20 · 2430 阅读 · 0 评论 -
VC++ 15个数据类型转换的示例代码
如何给VARIANT类型赋值{ VARIANT var; CString strText = _T(""); //初始化VARIANT类型变量 VariantInit(&var); //给VARIANT类型变量赋值 var.vt = VT_I4; var.lVal = (long)100; strText.Format(_T("var = %d"), var.lVal);原创 2017-12-19 12:45:39 · 724 阅读 · 0 评论 -
VS + wxWidgets开发配置指南
wxWidgets是一个开源的跨平台的C++构架库(framework),它可以提供GUI(图形用户界面)和其它工具。目前的2.x版本支持所有版本的Windows、带GTK+或Motif的Unix和MacOS。作为开源的界面库,不仅免费,而且一直处于持续维护更新中! 目前最新的稳定版本是3.0.2,下载地址:https://www.wxwidgets.org/download原创 2017-03-05 18:24:05 · 2820 阅读 · 0 评论 -
VC 如何向编辑控件中添加文本
由于没有CEdit:: AppendText函数,用户只好自己做此项工作。调用CEdit:: SetSel移动到编辑控件末尾,然后调用CEdit:: ReplaceSel添加文本。下例是AppendText 的一种实现方法:void CMyEdit:: AppendText (LPCSTR pText){ int nLen=GetWindowTextLength (); SetFocus原创 2016-02-22 10:48:34 · 843 阅读 · 0 评论 -
wxWidgets 自绘按钮(图片+文字)
在wxWidgets中,想要通过其本身的控件来实现图片+文件的按钮,貌似不太容易做到。但是可以通过重载wxControl来自绘图片+文件按钮。下面给出的是已经封装好的按钮类:wxBitmapButtonEx.h#ifndef _BITMAP_BUTTON_EX_H#define _BITMAP_BUTTON_EX_H#include "wx/wx.h"enum eBitm原创 2017-03-05 18:47:42 · 2680 阅读 · 0 评论 -
VC++ 如何实现程序启动后最小化到托盘
失败的经历:在OnInitDialog()中加上ShowWindow(SW_HIDE),无效!ShowWindow(SW_MINIMIZE);无效!基于对话框的程序,代码如下://实现程序启动后隐藏窗口,最小化到托盘图标。WINDOWPLACEMENT wp;wp.length = sizeof(WINDOWPLACEMENT);wp.flags = WPF_原创 2017-06-02 19:48:59 · 3668 阅读 · 0 评论 -
VC 获取并修改计算机屏幕分辨率
根据网上资料整理,并增加了相关参数注释。直接看代码吧:#include "stdafx.h"#include int _tmain(int argc, _TCHAR* argv[]){ //获取分辨率 int _cx = ::GetSystemMetrics(SM_CXSCREEN); int _cy = ::GetSystemMetrics(SM_CYSCREEN); /转载 2017-06-16 14:22:57 · 1476 阅读 · 0 评论 -
VC++ sourceforge.net中一些好的开源项目
介绍一下用VC++/MFC写的好的开源项目。 Sourceforge.net中有许多高质量的VC++开源项目,我列举了一些可以作为VC++程序员的参考。 一、优秀的开源项目 7-Zip (http://sourceforge.net/projects/sevenzip/) : 7-Zip 是具有很高压缩率的文件压缩工具。支持 7z, ZIP, CAB, RAR, ARJ, LZH, CHM, G...转载 2018-04-10 17:45:50 · 1299 阅读 · 0 评论 -
VC 获取Windows已安装软件(注册表方式)
Windows把卸载信息保存在注册表键HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/Uninstall之下。我们可以枚举这个键的子键来了解哪个软件已经安装且可以卸载。在这个键的下面,每个子键代表一个可卸载项,每个子键下都列出一系列和相关软件有关的信息,重要的是以下信息:DisplayName:显示名称,这是我们转载 2017-06-19 11:00:13 · 5881 阅读 · 1 评论 -
PolyPolygon, Polyline, Polygon的简单用法
BOOL Polygon(LPPOINT lpPoints, int nCount);void CExoView::OnDraw(CDC* pDC){ CPoint Pt[7]; Pt[0] = CPoint(20, 50); Pt[1] = CPoint(180, 50); Pt[2] = CPoint(180, 20); Pt[3] = CPoint(230, 70);原创 2017-12-16 23:53:10 · 7535 阅读 · 0 评论 -
如何获取Windows硬件设备信息(wmic命令介绍)
WMIC扩展WMI(Windows Management Instrumentation,Windows管理工具) ,提供了从命令行接口和批处理脚本执行系统管理的支持。以下是wmic常用命令介绍:获取cpu名称wmic cpu get Name获取cpu核心数wmic cpu get NumberOfCores获取cpu线程数wmic cpu get NumberOfLogicalProcessors查询cpu序列号wmic cpu get processorid查询主板序列号wmic原创 2022-05-10 11:40:19 · 2715 阅读 · 0 评论 -
JSONCPP遍历JSON数据
使用jsoncpp遍历json数据中所有键值,并打印出来。#include "json.h"#include #include typedef Json::Writer JsonWriter;typedef Json::Reader JsonReader;typedef Json::Value JsonValue;using namespace std;void print_json(Json原创 2016-06-07 23:00:14 · 16306 阅读 · 3 评论 -
JSONCPP的简单使用
JSONCPP下载地址:http://sourceforge.net/projects/jsoncpp。1、从字符串中解析JSON//从字符串中解析jsonvoid parse_json_from_string(){ printf("exec [parse_json_from_string]\r\n"); std::string szJson = "{ \"weatherin...原创 2016-06-14 16:20:50 · 3735 阅读 · 0 评论 -
Json Unexpected character in stream: r
Json解析遇到“Unexpected character in stream: r”,出现该异常的原因:1、Json在读取数据的时候,并不是完整的Json数据。原创 2017-04-21 13:02:36 · 800 阅读 · 0 评论 -
C++处理JSON数据交换格式
一、摘要 JSON 的全称为:JavaScript Object Notation,顾名思义,JSON 是用于标记 Javascript 对象的,JSON 官方的解释为:JSON 是一种轻量级的数据传输格式。本文并不详细介绍 JSON 本身的细节,旨在讨论如何使用 C++ 语言来处理 JSON。关于 JSON更具体的信息,可参见 JSON 官网:http://www.json.org转载 2016-04-14 10:54:06 · 4131 阅读 · 0 评论 -
C++ 如何获取Windows操作系统的语言
对于支持多语言版本的程序来说,一般都是先获取系统的语言,然后根据系统的语言,自动切换到与之对应的语言。Windows sdk 也提供了获取多个获取语言多个API函数:- GetSystemDefaultLangID- GetUserDefaultLangID- GetSystemDefaultUILanguage- GetUserDefaultUILanguage原创 2022-01-22 09:57:08 · 2484 阅读 · 1 评论 -
GetSystemDefaultLangID 与系统什么设置有关
在Windows操作系统中,我们可以通过GetSystemDefaultLangID 来获取系统语言,但是可能你不知道的是:到底是修改系统的哪个设置会影响到GetSystemDefaultLangID的返回值!原创 2021-12-16 17:03:01 · 1878 阅读 · 0 评论 -
openssl 生成RSA秘钥 以及 秘钥格式的相互转换
RSA秘钥的生成生成pkcs1格式私钥, 2048位才能够使用rsawithsha-256 进行签名.genrsa -out rsa_private_key.pem 2048openssl pkcs8 -topk8 -inform PEM -in private.pem -outform pem -nocrypt -out pkcs8.pem由pkcs1格式私钥导出, pkcs8格式公钥rsa -in rsa_private_key.pem -pubout -out rsa_public_key.原创 2021-11-05 14:32:52 · 1279 阅读 · 0 评论 -
C++ Windows 延迟加载DLL
dll加载顺序当启动一个可执行程序时,如果该程序需要加载其他DLL,那么当DLL的路径不是完整路径时,会先从当前目录下查找,找不到会再搜索系统目录,还是找不到的话,则依次搜索环境变量path的目录。原创 2021-10-27 18:39:06 · 1167 阅读 · 0 评论 -
mklink 一些常用操作总结
NTFS 符号链接又称“符号链接”,是 NTFS 文件系统中指向文件系统中的另一个对象的一类对象,被指向的对象叫做“目标”。mklink 是 Windows 下用于创建符号链接的工具,存在于 Windows Vista 及以后版本的 Windows 操作系统中。使用方式:MKLINK [[/D] | [/H] | [/J]] 链接名称 目标mklink 可以像创建快捷方式一样建立文件或文件夹的链接。但不同于快捷方式的是:mklink 创建的链接绝大多数程序都不会认为那是一个链接,而是一个真实存在的原创 2021-08-05 20:50:42 · 498 阅读 · 0 评论 -
Doxygen 使用教程小结
【安装】1、安装Doxygen下载地址:http://www.doxygen.nl/download.html2、安装Graphviz下载地址:http://www.graphviz.org/download/graphviz是一个由AT&T实验室启动的开源工具包,用于绘制DOT语言脚本描述的图形。Doxygen使用graphviz自动生成类之间和文件之间的调用...原创 2018-12-19 14:31:10 · 2398 阅读 · 0 评论 -
Doxygen 生成的html文件中文乱码
Doxygen是一种开源跨平台的,以类似JavaDoc风格描述的文档系统,完全支持C、C++、Java、Objective-C和IDL语言,部分支持PHP、C#。注释的语法与Qt-Doc、KDoc和JavaDoc兼容。Doxygen可以从一套归档源文件开始,生成HTML格式的在线类浏览器,或离线的LATEX、RTF参考手册。但是,很多人在使用doxygen生成技术文档时,都会遇到中文乱码...原创 2020-02-19 16:29:24 · 1704 阅读 · 0 评论 -
C++ 实时显示7z压缩与解压缩的进度
一、7zip下载地址:https://www.7-zip.org/sdk.html二、nmake编译下载完后,进入文件夹:使用VS的命令行工具(nmake)进行编译(命令:nmake /f makefile),在当前目录下生成x86文件夹,里面有本次编译的成果文件:7zra.dll三、转换示例工程(dsw转vs08)打开client7z工程,下载下来的是由dsw格式(N年前的格式,真是不懂得与时俱进),将其用vs08打开(vs17版本打开,会转换失败)四、修改示例代码打开client原创 2020-10-16 20:58:28 · 3776 阅读 · 0 评论 -
7z 常用压缩与解压缩命令
主页:http://www.7-zip.org/支持格式:压缩 / 解压缩:7z, XZ, BZIP2, GZIP, TAR, ZIP仅解压缩:ARJ, CAB, CHM, CPIO, DEB, DMG, FAT, HFS, ISO, LZH, LZMA, MBR, MSI, NSIS, NTFS, RAR, RPM, UDF, VHD, WIM, XAR, Z7-Zip 支持和 Windows 相类似的通配符:“”可以使用星号代替零个或多个字符。“?”可以用问号代替名称中的单个字符。原创 2020-09-25 17:06:36 · 34746 阅读 · 0 评论 -
bat 格式化年月日时分秒
下面是被调用的 bat 内容,接收两个参数并打印到屏幕:@echo offecho ----------------------------------------------------echo 这是被调用的BAT内容(接收两个参数并打印到屏幕)echo ----------------------------------------------------echo %1%echo %2%::去掉双引号set path1=%~1set path2=%~2echo path1= %p原创 2020-09-25 10:57:20 · 2514 阅读 · 0 评论 -
int a=1 是原子操作吗?
【原子操作定义】所谓原子操作是指不会被线程调度机制打断的操作;这种操作一旦开始,就一直运行到结束,中间不会有任何 context switch (切换到另一个线程)。也可以这样理解:如果这个操作所处的层(layer)的更高层不能发现其内部实现与结构,那么这个操作是一个原子(atomic)操作。原子操作可以是一个步骤,也可以是多个操作步骤,但是其顺序不可以被打乱,也不可以被切割而只执行其中的一部...原创 2019-02-25 10:34:16 · 9766 阅读 · 6 评论 -
一个进程(process)最多可以开辟多少个线程(thread)
进程与线程的关系简单复习一下:一个”进程“代表中计算机中实际跑起来的一个程序,在现代操作系统的保护模式下,每个进程拥有自己独立的进程地址空间和上下文堆栈。但是就一个程序本身执行的操作来说,进程其实什么也不做(不执行任何进程代码),它只是提供一个大环境容器,在进程中实际的执行体是”线程“。因此一个进程至少得有一个线程,我们把这个线程称之为”主线程“,也就是说,一个进程至少要有一个主线程。......原创 2019-02-22 11:06:24 · 31150 阅读 · 8 评论 -
为什么需要线程池
为什么需要线程池目前的大多数网络服务器,包括Web服务器、Email服务器以及数据库服务器等都具有一个共同点,就是单位时间内必须处理数目巨大的连接请求,但处理时间却相对较短。传统多线程方案中我们采用的服务器模型则是一旦接受到请求之后,即创建一个新的线程,由该线程执行任务。任务执行完毕后,线程退出,这就是是“即时创建,即时销毁”的策略。尽管与创建进程相比,创建线程的时间已经大大的缩短,但是如...原创 2019-01-07 14:38:51 · 180 阅读 · 0 评论 -
关键段CRITICAL_SECTION 与 互斥量Mutex 在线程互斥的性能比较
在多线程环境,对资源进行访问的时候,一般都需要加锁。这时候就涉及到加锁的性能问题:lock.h#ifndef _LOCK_H_#define _LOCK_H_#include <windows.h>//锁接口类class ILock{public: virtual ~ILock() {} virtual void Lock() const = 0; v...转载 2019-01-07 11:47:49 · 895 阅读 · 0 评论 -
进程通讯(共享内存)
Windows 共享内存,可以让两个进程对同一块内存进行读写。以下有2个进程:A.cpp生成A进程,B.cpp生成b进程。那么a进程将不停地读名为"Global\\MyFileMappingObject"的共享内存块,而b进程不停地写名为"Global\\MyFileMappingObject"的共享内存块。从而实现IPC。A.cpp代码如下:// IP转载 2017-07-17 20:20:44 · 569 阅读 · 0 评论 -
进程通讯(命名管道)
服务端代码:// pipe_server.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include #include #include int main(int argc, _TCHAR* argv[]){ srand(time(NULL)); char buf[256] = ""; DWORD rlen = 0; HAND原创 2016-09-13 17:58:00 · 1158 阅读 · 0 评论 -
进程注入方法总结
对内存中的某个进程进行操作,并且获得该进程地址空间里的数据,或者修改进程的私有数据结构,必须将自己的代码放在目标进程的地址空间里运行,这时就避免不了使用进程注入方法了。进程注入的方法分类如下:【带DLL的注入】 利用注册表注入 利用Windows Hooks注入 利用远程线程注入 利用特洛伊DLL注入【不带原创 2016-08-31 13:11:48 · 1500 阅读 · 0 评论