
VC学习实践及问题记录
Visual c++学习实践过程中一些功能实现方法的记录,以及在学习过程中遇到的种种问题、Bug的解决方案的记录,希望与大家共同学习,共同进步。
普通网友
这个作者很懒,什么都没留下…
展开
-
vs2010发布时去除msvcp100.dll和msvcr100.dll图解说明
最近开发个程序,Copy到虚拟机环境中测试时提示缺少msvcr100.dll,于是想到编译时设置选项去除依赖。什么是 msvcr100.dll MS = Microsoft V = Visual C = C program language R = Run-time 100 = Version什么是 msvcp100.dllMS = Microsoft V = Visual CP = C++ 10原创 2014-05-25 20:34:09 · 27610 阅读 · 12 评论 -
VC Windows API应用之GetDesktopWindow ——获得桌面所有窗口句柄的方法
Windows APIWindows 这个多作业系统除了协调应用程序的执行、分配内存、管理资源…之外, 它同时也是一个很大的服务中心,调用这个服务中心的各种服务(每一种服务就是一个函数),可以帮应用程式达到开启视窗、描绘图形、使用周边设备等目的,由于这些函数服务的对象是应用程序(Application), 所以便称之为 Application Programming Interface,简称 API原创 2015-04-19 14:49:26 · 33837 阅读 · 9 评论 -
RegisterClass和RegisterClassEx有什么区别?
引言继上篇文章“VC CreateWindow 找不到窗口类”中将RegisterClassEx改为RegisterClass问题就解决了,究竟是什么原因,RegisterClass和RegisterClassEx有什么区别呢? 经过一番查找和测试,终于找到了答案:不同之处:The RegisterClass function has been superseded by the Register原创 2015-02-09 16:51:48 · 12141 阅读 · 4 评论 -
VC CreateWindow 找不到窗口类
VC CreateWindow 找不到窗口类,有提示是因为没有调用RegisterClass注册窗口类,可是我已经使用RegisterClassEx注册了! //函数:MyRegisterClass //作用:注册窗口类ATOM MyRegisterClass(HINSTANCE hInstance){WNDCLASSEX wndclass;wndclass.cbSize = sizeof原创 2015-02-09 16:10:25 · 4234 阅读 · 0 评论 -
不能将参数 2 从“char [8]”转换为“LPCWSTR”
在编译一个网上的小项目的代码时,出现以下错误: 不能将参数 2 从“char [8]”转换为“LPCWSTR” 错误原因: 项目属性使用的Uncode字符集,与代码要求的不匹配; 解决办案: 选中项目,然后点击菜单中的项目——>属性——>配置属性——>常规——>项目默认值——>字符集,选为“使用多字节字符集”原创 2015-02-09 15:21:11 · 4382 阅读 · 10 评论 -
《Visual c++2013入门经典(第7版)》上机练习:为 Win32 控制台应用程序创建项目
看到《那些年我们追过的Wrox精品红皮计算机图书》有奖活动下载了《Visual c++2013入门经典(第7版)》的试读PDF,开始学习。这本书的读者对象本书针对任何想要学习如何使用 Visual C++编写在 Microsoft Windows 操作系统下运行的 C++应用程序的读者。阅读本书不需要预先具备任何特定编程语言的知识。如果属于下列 3 种情形之一,你就适合学习本教程:● 属于编程新手原创 2015-01-25 14:50:15 · 12883 阅读 · 11 评论 -
c++命令提示符窗口下打印指定大小的菱形代码
c++命令提示符窗口下打印指定大小的菱形代码VS2010下,新建空项目,添加源文件,将代码粘贴进去就可以了。通过改maxRows值的大小,可以控制菱形的大小#include #include //添加依赖的头文件void main() { int i,j,k; int maxRows = 12;//控制菱形的大小 //先打印上边的四行 for(i=1;i<maxRows;i+原创 2014-10-03 19:11:27 · 9029 阅读 · 0 评论 -
VS2010编写动态链接库DLL及单元测试用例,调用DLL测试正确性
本文将创建一个简单的动态链接库,并编写一个应用台控制程序使用该动态链接库,该动态链接库为“JAVA调用动态链接库DLL之JNative学习”中使用的DLL,只是项目及文件名称不同。创建动态链接库项目:1、打开Microsoft Visual Studio 2010,选择文件->新建->项目。2、在新建项目窗口中选择其他语言->Visual C++->Win32。3、选择Win32 项目,设置名称:原创 2014-05-27 22:46:18 · 31802 阅读 · 9 评论 -
VS2010中wmain入口函数中使用wprintf输出中文乱码问题
正确代码:#include "stdio.h"#include "Windows.h"#include int wmain(int argc, wchar_t* argv[]){ setlocale(LC_ALL, "chs"); wprintf(L"%s\n", L"中文字符");}其关键代码为:setlocale(LC_ALL, "chs");配置地域化信息函数为什么一定要调用原创 2014-05-18 19:52:59 · 4634 阅读 · 0 评论 -
IntelliSense 无法重载仅按返回类型区分的函数
IntelliSense:无法重载仅按返回类型区分的函数 d:\programfiles (x86)\microsoft sdks\windows\v7.0a\include\winbase.h 3540在VS2010下用C语言写Windows系统服务,从另一个c#的项目中Copy过来一段代码,修改后再编译,就产生了这个错误!在网上搜索得到的答案是:“无法重载仅按返回类原创 2014-05-18 17:50:35 · 14978 阅读 · 0 评论 -
SHA-1算法c语言实现
安全哈希算法(Secure Hash Algorithm)主要适用于数字签名标准 (Digital Signature Standard DSS)里面定义的数字签名算法(Digital Signature Algorithm DSA)。对于长度小于2^64位的消息,SHA1会产生一个160位的消息摘要。当接收到消息的时候,这个消息摘要可以用来验证数据的完整性。在传输的过程中,数据很可能会发生变化,原创 2014-05-14 09:59:05 · 34722 阅读 · 6 评论 -
C语言获取文件的SHA1哈希值
安全哈希算法(Secure Hash Algorithm)主要适用于数字签名标准 (Digital Signature Standard DSS)里面定义的数字签名算法(Digital Signature Algorithm DSA)。对于长度小于2^64位的消息,SHA1会产生一个160位的消息摘要。当接收到消息的时候,这个消息摘要可以用来验证数据的完整性。在传输的过程中,数据很可能会发生变化,原创 2014-05-12 00:17:43 · 14478 阅读 · 2 评论 -
多进程浏览器下ActiveX插件调试技巧
概述:现在主流的浏览器都是多进程浏览器,这却给ActiveX插件的调试带来了很大的不便!最近在使用VS2010开发ActiveX插件,由于要在真实的浏览器环境下调试,发现在附加到进程时想找到真正的宿主进程比较麻烦!于时想到了一个工具“Process Explorer”,使用它很容易就可以找到真正的宿主进程。使用方法:打开“Process Explorer”,点击“Find原创 2014-03-12 10:31:58 · 4316 阅读 · 0 评论 -
c / c + + 调用mysql存储过程
原文:c / c + + call mysql stored procedureE文好的请查看原文,菜鸟级翻译,欢迎批评指正!mysql5.0支持存储过程后,现在mysql6.0Alpha 版本也是可用的。6.0不仅支持大型数据库(如 oracle和如此的大多数功能(如存储过程、视图、触发器、作业等,并修复了这些功能存在的bug,6.0.1 版还支持windows 64 位 和表空间。C/c + + 要访问 mysql,只是一些简单的常用操作,c嵌入式简单查询、插入、更新和其他操作的使用可以。这翻译 2014-02-10 16:41:05 · 14181 阅读 · 1 评论 -
VC #define EC(x) L##x 作用说明
#define EC(x) L##x 作用说明表示L与x连接。#define Conn(x,y) x##y#define ToChar(x) #@x#define ToString(x) #xx##y表示什么?表示x连接y,举例说:int n = Conn(123,456); 结果就是n=123456;char* str = Conn("asdf", "adf")结果就是原创 2014-01-24 14:40:15 · 6377 阅读 · 0 评论 -
c++ 如何使用CryptoAPI创建一个自签名证书
引文链接:How to create a self-signed certificate with CryptoAPI (C++)CryptoAPI编程(1) 微软加密服务体系微软加密服务体系CryptoAPI的结构如下图所示,微软加密服务体系包含三层结构和两个接口,分别为应用程序层、操作系统层(OS)、加密服务提供者层(Cryptographic Service Pr翻译 2013-12-14 21:16:53 · 10358 阅读 · 3 评论 -
线程,进程间的通讯和同步原理,实现用例和应用
线程/进程间的通讯方式—使用全局变量/共享内存—使用thread中的lParam参数—使用socket—使用窗口和消息—使用命名管道/匿名管道—使用cmd参数—使用environment变量线程的启动,退出和lParam参数通讯VC:#include DWORD WINAPI ThreadProc(LPVOID lParam);原创 2013-03-27 15:00:10 · 6859 阅读 · 6 评论 -
C/C++ For循环语句的效率测试优化及运行时错误:Stack Overflow的解决办法
C/C++ For循环语句的效率测试优化及运行时错误:Stack Overflow的解决办法在多重循环中,如果有可能,应当将最长的循环放在最内层,最短的循环放在最外层,以减少CPU跨切循环层的次数。使用以下代码对嵌套For循环的效率进行测试验证:// For嵌套性能.cpp : Defines the entry point for the console ap原创 2013-03-04 14:45:16 · 5164 阅读 · 0 评论 -
VC编程时关于 WM_MOUSEENTER 和 WM_MOUSELEAVE消息
关于 WM_MOUSEENTER 和 WM_MOUSELEAVE消息这两个消息比较古怪,虽然你能找到他们的定义,看起来也似乎挺有用,但是却接收不到。如果要处理这两个消息需要手动在WM_MOUSEMOVE消息处理函数中添加:添加变量:BOOL m_bTracking;m_bTracking = FALSE;添加消息处理函数:afx_msg LRESULT OnMo原创 2012-10-25 17:18:12 · 7885 阅读 · 0 评论 -
无法执行添加/移除操作,因为代码元素**是只读的
在vs中,大量添加窗体或者控件后,发现无法由系统IDE自动生成代码,如自动添加按钮响应函数等,rc管理器界面双击按钮添加函数,会出现 提示框 “无法执行添加/移除操作,因为代码元素**是只读的”。开始认为可能是对应的.cpp和.h被加了只读属性,后来发现是工程的ncb文件引起的。解决方案:关闭vs,删除工程对应的.ncb文件,重启vs就好了。问题原因:NCB是no compile brow原创 2012-10-25 17:08:41 · 19037 阅读 · 4 评论 -
error PRJ0003 : 生成“C:\WINDOWS\system32\cmd.exe”时出错
最近使用visual studio 2005或visual studio 2008的编译项目时可能都遇到了这样的问题:error PRJ0003 : 生成“C:\WINDOWS\system32\cmd.exe”时出错 1>Project : error PRJ0003 : Error spawning 'C:\Windows\System32\cmd.exe'.1>Build l原创 2012-10-18 16:44:43 · 11668 阅读 · 2 评论 -
vc 创建桌面快捷方式
BOOL CDlg::CreateDesktopShotCut(CString strName, CString strSourcePath){ if (FAILED(CoInitialize(NULL))) return FALSE; BOOL bRet = FALSE; TCHAR Path[MAX_PATH+1]; CString strDestDir;原创 2012-09-13 09:42:54 · 2841 阅读 · 0 评论 -
VC 如何创建自身快捷方式
#include #include #include void main(){ HRESULT hr = CoInitialize(NULL); if (SUCCEEDED(hr)) { IShellLink *pisl; hr = CoCreateInstance(CLSID_ShellLink, NULL, CLSCTX_INPROC_SE原创 2012-09-13 09:37:49 · 2173 阅读 · 0 评论 -
VC 数字转换为人民币金额大写的简单算法实现
void CNumberToRMBDlg::OnButton1() { // TODO: Add your control notification handler code here UpdateData(TRUE); int pos = m_szNumber.Find(_T(".")); CString szInteger, szFloat; if (pos !原创 2012-09-04 13:37:33 · 4079 阅读 · 0 评论 -
DWORD类型的IP地址转换为CString字符串
从ip地址控件获得的ip地址是DWORD类型的 用MessageBox怎样将ip地址显示出来呢?DWORD类型32位,每4位为一组代表常见的IP地址,即***.***.***.***。采用HIWORD、LOWORD、HIBYTE、LOBYTE即可解析出各个字段。参考方案如下: DWORD dwIPAddr; CString str; WORD hiWord=HIWOR原创 2012-08-26 10:03:19 · 4853 阅读 · 0 评论 -
VC类中定义静态常量
在C++类中定义常量,有以下两种方法:1.在类定义体内定义枚举常量; 例如: class A { public: enum { THREAD_NUM = 100, MEM_BLOCK_SIZE = 1024, PORT = 8080 };原创 2012-07-20 14:05:35 · 4133 阅读 · 0 评论 -
LWA_COLORKEY undeclared identifier 的解决办法
SetWindowLong(this->GetSafeHwnd(), GWL_EXSTYLE, GetWindowLong(this->GetSafeHwnd(),GWL_EXSTYLE)^0x80000); HINSTANCE hInst = LoadLibrary("User32.DLL"); if(hInst) {原创 2012-07-05 09:52:39 · 4677 阅读 · 0 评论 -
VC 开发中遇到的问题记录(一)
STATIC类型的控件添加到窗体上如果不重命名ID的话,都将保持默认的ID:65535,通过配置文件根据ID动态子类化的时候将出现问题:相同的ID将只有一个能被子类化,其它的无法子类化;不改变ID想解决此问题的方法:遍历相同的ID,匹配时添加Text是否相等的条件,但Text也有相等的情况;这些控件包括:Static,Picture,GroupBox;原创 2012-06-20 09:58:23 · 1878 阅读 · 0 评论 -
VC 如何对不规则图形填充颜色
CRect rectCheck = rectBox; rectCheck.left += 3; rectCheck.top += 3; penLed.DeleteObject(); penLed.CreatePen(PS_SOLID, 1, RGB(19, 202, 0)); pDC->SelectObject(&penLed); brushLed.De原创 2012-06-18 13:13:35 · 6925 阅读 · 0 评论 -
VC 轻松实现非客户区按钮
源代码下载一、简介有时我们需要在非客户区(例如:标题栏)添加按钮,并对按钮作出响应,如下图所示:为此我封装了两个类CNCButton和CNCButtonManager,CNCButton主要用于按钮绘制,CNCButtonManager用于按钮的管理并对非客户区的消息进行处理。如下是几个主要的非客户区消息:WM_NCHITTESTWM_NCACTIVAT原创 2012-06-12 12:57:03 · 4526 阅读 · 0 评论 -
VC++中subclassdlgitem函数的功能、用法及注意事项
subclassdlgitem 该函数用来子类化一个控件. Subclass(子类化)是MFC中最常用的窗体技术之一。子类化完成两个工作:一是把窗体类对象attach到一个windows窗体实体中(即把一个窗体的hwnd赋给该类)。另外就是把该类对象的消息加入到消息路由中,使得该类可以捕获消息。 SubclassDlgItem可以把原创 2012-06-10 10:14:02 · 11175 阅读 · 3 评论 -
VC 窗体非客户区的绘制 OnNcPaint(UINT message, WPARAM wParam, LPARAM lParam)
void CSkinAndLangDlg::OnNcPaint(UINT message, WPARAM wParam, LPARAM lParam){ HDC WindowDC = ::GetWindowDC(m_hWnd);// //取得整个窗体矩形 RECT WindowRect; GetWindowRect(&WindowRect); OffsetRect(&Wind原创 2012-06-09 09:52:23 · 9142 阅读 · 0 评论 -
VC 如何得到系统所用的语言?
LANGID langid = GetSystemDefaultLangID(); //例如:2052 langid = GetUserDefaultLangID(); //例如:2052 CString msgFile; msgFile.Format(_T("%04xl"),langid); //例如:0804 TCHAR name[4*1024]={0}; Ge原创 2012-06-08 14:31:59 · 3705 阅读 · 0 评论