
windows编程 & MFC
i丹明扬
不甘于平凡,竭尽全力,追求自己的梦想
展开
-
vc6 和vs2008编码方式问题
以下的代码无法编译,vc++6.0可以编译,c-free也可以#include "stdafx.h"#include #include int main(int argc, char *argv[]){CHAR *szCmdLine = "cmd";STARTUPINFO si = {sizeof(si)};PROCESS_INFORMATION pi;原创 2012-02-24 12:45:26 · 1520 阅读 · 0 评论 -
(孙鑫)VC++深入讲解 第八章 VS2010实现逃跑按钮
孙鑫的VC++视频,是在VC6.0的环境下讲的,在VS2010中,多少有点儿区别。1.增加一个新的类(基于CButton的)这个其实很简单,在按钮上点右键,再点Class Wizard,即可,出现如图所示:再点击右上角的“添加类”。类名自己写,基类可以选择的接下来是添加变量:在控件按钮上单击右键,选择“添加变量”原创 2012-03-22 20:49:31 · 4271 阅读 · 1 评论 -
C语言也能干大事 第七节 笔记
一:fopen中文件路径问题 case ID_open:{FILE *fp = fopen("E:\\CODE\\Win32 DialogBased Application26\\a.txt","r");char line[256];fgets(line,sizeof(line),fp);fclose(fp);SetDlgItemText(hwnd,IDC_EDIT原创 2012-02-26 17:59:21 · 943 阅读 · 0 评论 -
通过CREATESTRUCT 的结构体对象修改窗口没效果 原因剖析
MFC单文档程序:BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs){if( !CFrameWndEx::PreCreateWindow(cs) )return FALSE;// TODO: 在此处通过修改// CREATESTRUCT cs 来修改窗口类或样式cs.cx = 4000;cs.cy = 400;原创 2012-04-11 13:42:02 · 1770 阅读 · 1 评论 -
MFC中LoadCursor 与 LoadImage
如何在单文档程序中,自定义光标。在view类中添加WM_SETCURSOR消息,记住在视图类而不是在框架类中,就如墙纸和墙的关系,你懂得。。。然后添加如下代码:SetCursor(AfxGetApp()->LoadCursor(IDC_CURSOR));AfxGetApp( )是全局的。 AfxGetApp( )这个函数可以得到当前应用进程的指针,是CWinApp*类型的原创 2012-04-13 10:30:31 · 4182 阅读 · 0 评论 -
随鼠标移动画线
使用MFC开发一个WINDOWS画图程序, 具体形式参看WINDOWS操作系统附件中的“画图”程序。要求能实现基本的自由手绘曲线功能,其他方面不 做要求。这个做的很简单。只是实现鼠标自由画线。没有保存,打印,画椭圆什么的功能。实现过程如下:在visual C++6.0里面 文件->新建->工程里面的MFC Appwizard [EXE] 基本上都是默认的。除了转载 2012-04-13 21:58:16 · 2500 阅读 · 1 评论 -
setlocale函数作用
setlocale:函数原形为:char *setlocale( int category, const char *locale );头文件:所支持的操作系统为:ANSI, Win 95, Win NT对于简体中文可以使用如下设置:setlocale( LC_ALL, "chs" );为什么一定要调用setlocale呢?因为在C/C++语言标准中定义了其运行时的字符集环转载 2012-04-15 23:54:39 · 7767 阅读 · 1 评论 -
ipch文件夹和.sdf文件是什么?
在使用Visual Studio 2010开发C++程序的时候,会发现有一些奇怪的文件被创建出来,比如一个叫ipch的文件夹,和一个与工程同名的.sdf文件,而且ipch下面的文件和.sdf文件都很大,至少有10M,大项目可能超过100M,那这些文件是干什么用的呢?这些文件是Visual Studio用来保存预编译的头文件和Intellisense用的,删除这些文件对于工程的开发完全没有影响。那如转载 2012-04-16 00:29:07 · 18159 阅读 · 2 评论 -
win32创建对话框遇到的各种问题
这居然是头文件包含顺序问题。。。。。。牢记啊,不起眼的细节,也能造成很多磨不着头脑错误啊参考:http://topic.youkuaiyun.com/u/20080822/10/1cd4ba5f-10fc-433d-abe4-9e65683cbb18.html改过之后第一段的错误没了,第二段为什么呢?我明明在头文件里定义了的啊。。。。我擦擦250次/ns,所谓的消息分流器HANDLE_MSG竟原创 2012-05-28 21:39:02 · 1069 阅读 · 0 评论 -
调用字体通用对话框来改变文本框中的文字的字体 碉堡了啊,收藏
void CEsayChatDlg::OnButtonFont() //改变字体 的响应函数{ // TODO: Add your control notification handler code here //获得控件的当前字体 LOGFONT lf; GetDlgItem(IDC_EDIT_RECORD)->GetFont()->GetLogFont(&lf); //使用按转载 2012-05-30 01:35:42 · 1954 阅读 · 0 评论 -
LINK : warning LNK4098: 默认库“LIBCMTD”与其他库的使用冲突;请使用 /NODEFAULTLIB:library
以前经常遇到这个警告信息,因为运行并没有什么问题,所以也没深究。但是耿耿于怀那个“ 0 个错误,0 个警告”的成功提示,在网上搜了一下。原来问题出在默认库的引用选择上。VS2008,项目——属性——配置属性——C/C++——代码生成:他有/MT,/MTd,/Md,/MDd四个选项,你必须让所有使用的库都使用相同的配置,否则就会有相应的提示,甚至可能会出现无法解析的函数。有时我们使用的库不是转载 2012-05-29 22:55:57 · 2476 阅读 · 0 评论 -
skinmagic对话框菜单不显示
费了九牛二虎之力啊啊啊啊啊参考着这个链接和例子加载皮肤http://www.rupeng.com/forum/thread-11576-1-1.html但skinmagic对话框菜单不显示,http://zhidao.baidu.com/question/97145489.html下面是对话框加载菜单的代码: CMenu* pSysMenu = GetSystemM原创 2012-05-13 19:14:00 · 1899 阅读 · 0 评论 -
LineDDA的使用方法(绘制复杂线条)
LineDDA的使用方法(绘制复杂线条)介绍(一)该函数的原型如下: BOOL LineDDA(int nXStart, int nYStart, int nXEnd, int nYEnd, LINEDDAPROC lpLineFunc, LPARAM lpData); 参数说明如下: nXStart:起点的X值 nYStart:转载 2012-05-15 21:37:09 · 2273 阅读 · 0 评论 -
错误代码中文查询GetLastError返回代码的含义
错误代码中文查询GetLastError返回代码的含义(一)(0~1398)〖0〗-操作成功完成。〖1〗-功能错误。〖2〗-系统找不到指定的文件。〖3〗-系统找不到指定的路径。〖4〗-系统无法打开文件。〖5〗-拒绝访问。〖6〗-句柄无效。〖7〗-存储控制块被损坏。〖8〗-存储空间不足,无法处理此命令。〖9〗-存储控制块地址无效转载 2012-05-18 17:00:46 · 1514 阅读 · 0 评论 -
ASCII,Unicode和UTF-8
ASCII在计算机内部,所有的信息最终都表示为一个二进制的字符串。每一个二进制位(bit)有0和1两种状态,因此八个二进制位就可以组合出256种状态,这被称为一个字节(byte)。也就是说,一个字节一共可以用来表示256种不同的状态,每一个状态对应一个符号,就是256个符号,从0000000到11111111。上个世纪60年代,美国制定了一套字符编码,对英语字符与二进制位之间的转载 2012-07-12 20:24:42 · 900 阅读 · 0 评论 -
GetLogicalDrives()函数
原型:DWORD GetLogicalDrivers (void);说明:函数返回值是一个long型,将其用二进制显示时,其中第0位表示A盘,第1位表示B盘,当某位为1时说明存在这个盘,即00000011表示有A盘和B盘。看这个例子:#include int main(){DWORD dw;TCHAR TC1[50],TC2[50];dw = GetLogi原创 2012-04-10 01:27:45 · 10466 阅读 · 1 评论 -
WM_USER 与 WM_APP
详情参见百度百科WM_USER常量是Windows帮助应用程序定义私有窗口类里的私有消息,通常使用WM_USER+一个整数值,但总值不能超过0x7FFF。#define WM_USER 0x0400 WM_USER定义在WinUser.h中。范围表示 0 ~ WM_USER–1操作系统保留的消息。 WM_USE原创 2012-04-10 00:26:32 · 2586 阅读 · 0 评论 -
_stdcall 和 _cdecl
每个线程都必须有一个进入点函数,线程从这个进入点开始运行。主线程的进入点函数是main,如果想在线程中创建另一个辅助线程,则必须为该辅助线程创建一个进入点函数,这个函数被称为线程函数。线程函数的定义如下:DWORD WINAPI ThreadProc(LPVOID lpParam); //线程函数名称可以是任意的WINAPI 是一个宏,在windef.h 文件中有声明:#de原创 2012-02-24 12:56:42 · 760 阅读 · 0 评论 -
UNREFERENCED_PARAMETER的用处
作用:告诉编译器,已经使用了该变量,不必检测警告!在VC编译器下,如果您用最高级别进行编译,编译器就会很苛刻地指出您的非常细小的警告。当你生命了一个变量,而没有使用时,编译器就会报警告:“warning C4100: ''XXXX'' : unreferenced formal parameter.” 所以,为了让编译器不必检测你的警告,就使用UNREFERENCED_PARAME转载 2012-02-14 21:22:31 · 1059 阅读 · 0 评论 -
VC++ 中控件的ID 与 句柄 关系
其他高级语言的控件只有控件名称,没有什么ID,但也有句柄。在C++这两个概念都是控件的标识,这两个概念可以从"内外两方面考虑", "外"指的是用户(程序员)识别的,在vc编辑系统中,ID就是被程序员利用的,对各种控件进行操作的标识;"内"部的ID是指句柄,即句柄是内部操作系统识别这个ID的标识。 另外,在程序运行期,整个进程不会有ID这个东西,只会有句柄,而在编辑器内(即在程序的非运行转载 2012-02-15 21:39:31 · 2279 阅读 · 1 评论 -
CreateThread
#include #include // 线程函数DWORD WINAPI ThreadProc(LPVOID lpParam){int i = 0;while(i {printf(" I am from a thread, count = %d \n", i++);}return 0;}int main(int argc, cha原创 2012-02-24 13:21:58 · 1095 阅读 · 0 评论 -
ComboBox的操作
(1)添加项:填入Combo最简单的方法是借助ComboBox_AddString“函数”(其实是宏):ComboBox_AddString(hwndCtrl,str) 每个控件也有自己的句柄。句柄是WINDOWS用来标识被应用程序所建立或使用的对象的唯一整数,WINDOWS使用各种各样的句柄标识诸如应用程序实例、窗口、图片、图标等等。控转载 2012-02-15 22:22:32 · 1195 阅读 · 0 评论 -
FindWindows FindWindowsEx 函数
#include "stdafx.h"#include int main(int argc, char* argv[]){// 查找标题为“无标题 - 记事本”的窗口 // 也可以使用类名来查找,如::FindWindow("Notepad", NULL); HWND hWnd = ::FindWindow(NULL, "无标题 - 记事本");if(hW原创 2012-03-04 11:01:05 · 4240 阅读 · 0 评论 -
Windows程序的框架
步骤:注册,创建,显示,更新,消息循环。。。BeginPaint函数取得窗口客户区无效区域的设备环境句柄。GetWindowsDC函数能取得整个窗口的设备环境句柄。GetDC传回的句柄是在整个客户区上,不只是在客户区的无效区域#include #include "resource.h"#include // 窗口函数的函数原形LRESULT CALL原创 2012-03-04 21:03:53 · 976 阅读 · 0 评论 -
不进队消息和进队消息
不进队消息和进队消息不进队消息和进队消息。不进队消息是指由Windows直接调用消息处理函数,把消息直接交给其处理。而进队消息是指Windows将消息放入到程序中的消息队列中取,并通过程序中的消息循环,循环把消息取出,经过一定处理(如例子中经过translate),然后由函数DispathMessage函数将消息分发给消息处理函数处理。进队消息基本上是用户的输入:击键的消息(WM_转载 2012-03-04 15:09:56 · 11184 阅读 · 0 评论 -
vs中如何像vc6一样增加windows消息处理
vc中是直接在类视图中找到所处理的类,右键即可vs中如图:属性页中删除的话,选中类名,然后到还到属性页那个对应消息处,点击后边那个按钮,即可原创 2012-03-05 23:52:12 · 885 阅读 · 0 评论 -
vc++ 数据库初探
最近虽然很多事,但决心要学mfc,就要挤出时间练习和总结。孙鑫的书看了4章,我发现以后的东西每章都关系不大,所以想先学点数据库应用,到时再学后边的知识时,连带着把数据库知识也用上。坚持啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊,明哥,为了成立一个NB的软件公司。。。。。。。。总结下:先创建一个基于对话框的单文档mfc程序;然后在资源菜单的Dialog窗口上,右键插入Activex 控件,原创 2012-03-10 21:00:23 · 1213 阅读 · 0 评论 -
LPSTR、LPWSTR、LPCSTR、LPCWSTR、LPTSTR、LPCTSTR的区分与转化
首先在编译程序时经常会遇到这种问题:错误 1 error C2664: “CWnd::MessageBoxW”: 不能将参数 1 从“const char [3]”转换为“LPCTSTR” 1、觉得很烦,一般的做法就是不管三七二十一,在字符串前面加一个‘L’:如调用函数FUN(LPCTSTR str)时,不能 FUN("HELLO"); 而是FUN(L转载 2012-03-29 21:36:22 · 1632 阅读 · 0 评论 -
VC6.0内存泄露检测工具
我在本文中详细介绍了测试工具NuMega Devpartner(以下简称NuMega)的使用方法。NuMega是一个动态测试工具,主要应用于白盒测试。该工具的特点是学习简单、使用方便、功能有效。NuMega共有三个独立的子功能——BoundsChecker、TrueCoverage、TrueTime。BoundsChecker为代码检错工具,TrueCoverage为测试覆盖率统计工具,T转载 2012-03-14 13:29:53 · 4191 阅读 · 4 评论 -
MFC中如何定义全局变量
MFC中如何定义全局变量 3种方法:1、在一个cpp文件中用extern声明,然后在其他文件中定义就可以用 2、在**APP类中做公有变量,其他类中用AfxGetApp()得到一个App对象指针就可引用 3、专门写一个全局类,里边的变量及方法全部声明为静态具体说明如下(来自网络):最好在.cpp转载 2012-03-29 16:38:30 · 8165 阅读 · 2 评论 -
MessageBox输出整数
Format是CString类的一个成员函数,它通过格式操作使任意类型的数据转换成一个字符串。例子:int n = 1;CString str;str.Format("%d",n);Message(hwnd,str,"标题",MB_OK);原创 2012-03-31 23:26:44 · 2882 阅读 · 0 评论 -
_tcsstr _tcsrchr
_tcsstr:字符串1在字符串2中首次出现的位置,未出现返回NULL值;_tcsrchr:字符1 在字符串2中首次出现的位置,未出现返回NULL值TCHAR字符串操作函数:_tcslen(str) 获得字符串长度_tcsrchr(str, L'\\') 反向搜索获得最后一个TCHAR的位置_stprintf(TCHAR *buffer,const TCHAR *format [,a原创 2012-04-09 09:31:30 · 8629 阅读 · 0 评论 -
VC++常规错误之21:Debug Assertion Failed!在winocc.cpp第307或329行错误
转自:http://hi.baidu.com/vc_net/item/a6357e0e6d5437f3a1103447断言错误,如图所示找到代码(这个是VS2010版本的,各个版本会有所不同,可能不是在第329行,但是都是这个意思),如下BOOL CWnd::ShowWindow(int nCmdShow){ ASSERT(::IsWin转载 2012-08-26 15:39:31 · 9226 阅读 · 1 评论