C/C++
pandy1110
keep learning...
展开
-
WaitForSingleObject用法
WaitForSingleObject的用法 DWORD WaitForSingleObject( HANDLE hHandle, DWORD dwMilliseconds ); 参数hHandle是一个事件的句柄,第二个参数dwMilliseconds是时间间隔。如果时间是有信号状态返回WAIT_OBJECT_0,如果时间超过原创 2010-01-27 19:34:00 · 203 阅读 · 0 评论 -
去掉文件名的后缀
<br />CString strFile = "file1.txt "; <br />int pos = strFile.ReverseFind( '. ')); <br />if ( pos > 0 ) <br /> CString strRet = strFile.Left(pos); <br /><br />// Now, strRet == "file1 "原创 2010-06-01 19:10:00 · 500 阅读 · 0 评论 -
导入配置参数注册表并立马生效
<br />void CMainFrame::OnImportRegedit()<br />{<br /> // TODO: Add your command handler code here<br /> CFileDialog dlg(TRUE,NULL,NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,<br /> "Register File(*.reg)|*.reg||");<br /> if(dlg.DoModal() == IDOK)<br /> {<b原创 2010-06-07 19:09:00 · 355 阅读 · 0 评论 -
CDialogBar上的按钮为灰色
vs2008 添加控件变量关联右击控件添加变量是灰色的 见 http://support.microsoft.com/default.aspx?scid=kb;en-us;98198原创 2010-06-11 13:58:00 · 456 阅读 · 0 评论 -
How to Initialize Child Controls in a Derived CDialogBar
DialogBar相比Dialog有很多优势。因CDialogBar继承于CControlBar,因此其可以Docking在窗口一边,而把CView挤压开,但是 CDialogBar 的使用并不是很容易,因为 MFC 里面并没有提供直接可以使用的CDialogBar,我们需要自己动手,打造自己的完美的 DialogBar。 首先,你需要建立一个CDialog的子类(比CMyDlgBar)。然后,我们来把他一步步转换成CDialogBar的子类。 1、改变基类和消息映射 我们头文件中把CMyDlgBar的基类原创 2010-06-11 14:08:00 · 363 阅读 · 0 评论 -
有关GetDlgItem
CWnd::GetDlgItem(int nID) 这个是一个类成员函数 而HWND GetDlgItem( HWND hDlg, // handle of dialog box int nIDDlgItem // identifier of control ); 是一个sdk的函数 两个的主要区别是用的地方不一样 一个参数的是在窗口中调用的函数,两个参数的是在平台SDK中调用的 你在对话框累里面调用GetD原创 2010-06-13 11:33:00 · 5148 阅读 · 0 评论 -
关于模式与非模式对话框
<br /> 对话框有两种创建方式:DoModal和Creat。 其中DoModal创建的是模态的对话框,而Creat创建的是非模态的对话框下面总结下他们的不同。<br /> 对于模态的对话框,在该对话框被关闭前,用户将不能在同一应用程序的其他地方进行工作(例如open file对话框),而对于非模态的对话框,在它留在屏幕上的同时可以在其他的地方进行工作,(例如find file对话框)<br /><br /> Create的Dialog一般是modalless,如果你的程序本转载 2010-06-23 16:28:00 · 495 阅读 · 0 评论 -
一组按钮的消息响应
<br /> 当子窗口控件的状态发生改变时,控件通过向其父窗口发送WM_COMMAND消息进行通信,在该消息的wParam中含有通知消息和控件的ID,在lParam中则包含了控件的句柄。例如,当用户在按钮上单击鼠标时,按钮控件会向父窗口发送BN_CLICKED消息。 <br /> 利用ClassWizard可以很容易地为控件通知消息加入消息映射和消息处理函数。例如,某按钮的BN_CLICKED消息的消息映射及其处理函数的声明如下所示:<br /> ON_BN_CLICKED(IDC_ADD原创 2010-10-09 17:34:00 · 1321 阅读 · 0 评论 -
CDialogBar使用
<br />用对话框创建CDialogBar派生的类并在CReBar上添加<br /><br /> <br />摘要:本文详细解说了CDialogBar的具体使用过程,可以做为VC++和MFC新手学习总结用。<br /><br /> <br />一、创建DialogBar的派生类<br />首先,创建对话框资源:在对话框资源编辑器内生成一个Dialog资源,并将其风格(Style)属性必须设置为Child,不能设置为Overlapped或Popup,否则运行肯定出错;至于边界属性则随用户自己喜欢,一般都是选转载 2010-10-11 22:00:00 · 447 阅读 · 0 评论 -
对话框内控件更新
<br />afxpriv.h has a message, WM_KICKIDLE, that is sent during idle processing. To get dialogs to work with the ON_UPDATE_COMMAND_UI message maps, you need to trap the kick idle message and call UpdateDialogControls. <br />In a dalog class header, add the原创 2010-10-12 11:41:00 · 346 阅读 · 0 评论 -
Button按钮响应鼠标按下与弹起消息
<br />对话框上的按钮本身只能添加单击双击时间,不能响应鼠标按下与弹起消息,可以通过两种方法实现:<br />1.重载CButton类,将该类子类化<br /> 在工程中添加一个新类CMyButton,基类为CButton。<br /> 在对话框MyDlg中为IDC_BUTTON添加变量,在变量类型里选择CMyButton,变量名自定义,如m_myButton。添加函数OnDown与OnUp函数响应按钮按下与弹起消息<br /> 在Class name中选择CMyButton,然后添加原创 2010-10-20 09:12:00 · 2853 阅读 · 6 评论 -
Vector作为形参
<br />通常,函数不应该有vector或其他容器类的形参。调用vector形参的函数将会复制vector的每一个元素。为避免复制,应将其声明为引用类型。然而,C++程序员更倾向于使用传递迭代器,如下:<br />#include "Head.h"<br />void print(vector<int>::const_iterator beg,<br /> vector<int>::const_iterator end)<br />{<br /> while (beg != end)<br />转载 2010-10-27 20:14:00 · 3350 阅读 · 0 评论 -
调整屏幕分辨率
界面在不同分辨率下的显示确实是一个比较头疼的问题。下面贴一个完整的代码,作用是首先罗列系统支持的所有分辨率模式,如果不支持1024*768给出提示,如果支持但当前设置不是1024*768则给出是否更改的提示。C/C++ code //---------------罗列系统支持的分辨率---------------------------- DEVMODE *lpDevMode; lpDevMode=new DEVMODE; int i=0; CString Str[500原创 2011-03-03 11:08:00 · 758 阅读 · 0 评论 -
CCommandLineInfo
在我们用向导创建MFC应用程序时,在App::InitInstance()中总会出现下面这样的代码到底是什么意思呢,我差了很多资料终于使其漏出庐山真面目。<br /><br />CCommandLineInfo cmdInfo;//定义命令行<br />ParseCommandLine(cmdInfo);//解析命令行<br /><br />// 调度在命令行中指定的命令。如果<br />// 用 /RegServer、/Register、/Unregserver 或 /Unregister 启动应用程序,转载 2011-02-15 10:55:00 · 703 阅读 · 1 评论 -
delete指针出现_CrtIsValidHeapPointer(pUserData)错误
_CrtIsValidHeapPointer(pUserData)_CrtIsValidHeapPointer(pUserData) in dbghelp.c2006-10-14 18:19When I execute my program (it's multithread and has COM and dll),there is an error message as follows:Program D:/dongle_1/TestAP/bin/Debug/TestAP.exeFile: dbghea转载 2011-03-11 12:54:00 · 1866 阅读 · 0 评论 -
指向vector的指针
有时需要使用指向vector的一个指针,我们可以这样来做。 vector v; 表达式v[0]生产一个指向vector中第一个元素的引用,所以,&v[0]是指向那个首元素的指针。vector中的元素被C++标准限定为存储在连续内存中,就像是一个数组,所以,如果我们想要传递v给这样的C风格的API: void doSomething(const int* p原创 2010-05-22 10:27:00 · 8076 阅读 · 1 评论 -
MFC数组类CArray的使用的操作详解
MFC的数组类支持的数组类似于常规数组,可以存放任何数据类型。常规数组在使用前必须将其定义成能够容纳所有可能需要的元素,即先确定大小,而MFC数组类创建的对象可以根据需要动态地增大或减小,数组的起始下标是0,而上限可以是固定的,也可以随着元素的增加而增加,数组在内存中的地址仍然是连续分配的。 MFC定义了数组模板类CArray,并针对各种常用变量类型定义了CByteArray,CArray,CU转载 2010-05-22 10:39:00 · 305 阅读 · 0 评论 -
使用MFC 发送消息模拟按钮按下事件
有时我们需要这么做, 手动模拟按钮按下的事件, 让程序做出与按钮真的按下时一样的响应. 设按钮ID为ID_BTN_OK, 当前Dialog窗口. 实际上系统并不能区分按钮是真的按下了(如用鼠标点击), 还是一个我们自己用代码模拟出的一种"假象".它所需要知道的只是哪个窗口(按钮也是一种窗口)发生了哪一种事件, 然后在消息循环中处理它. 系统怎么才能知道这些呢? 当然靠的是消息(mes转载 2010-05-19 20:26:00 · 1875 阅读 · 4 评论 -
AfxBeginThread和CreateThread具体区别
具体说来,CreateThread这个 函数是windows提供给用户的 API函数,是SDK的标准形式,在使用的过程中要考虑到进程的同步与互斥的关系,进程间的同步互斥等一系列会导致操作系统死锁的因素,用起来比较繁琐一些,初学的人在用到的时候可能会产生不可预料的错误,建议多使用AfxBeginThread,是编译器对原来的CreateThread函数的封装,用与MFC编程(当然,只要修改了项目转载 2010-01-26 20:20:00 · 278 阅读 · 0 评论 -
SVN
Subversion:是一个自由,开源的版本控制系统TortoiseSvn:是windows下功能最强、最实用的svn客户端。它与资源管理器的右键菜单集成,可以管理包括源代码在内的任何文件。它的“图标叠加(Icon Overlay)”功能,可以让我们从文件和文件夹的图标中直观的看出它们的状态,如是否被修改等。另外,前面提到的SubWCRev就是它的一部分。AnkhSvn:一个visual st原创 2010-01-27 17:16:00 · 330 阅读 · 0 评论 -
VC中Radio控件的用法
先为对话框加上2个radio button,分别是Radio1和Radio2。问题1:如何让Radio1或者Radio2默认选上?如何知道哪个被选上了?关键是选上,“默认”只要放在OnInitDialog()即可。三种方法可以让它选上,第一种:((CButton *)GetDlgItem(IDC_RADIO1))->SetCheck(TRUE);//选上((CButton *)GetDlg转载 2010-02-25 10:20:00 · 178 阅读 · 0 评论 -
min_element/max_element
#include forward_iterator min_element( forward_iterator start, forward_iterator end ); forward_iterator min_element( forward_iterator start, forward_iterator end, BinPred p );The min_eleme转载 2010-03-09 19:51:00 · 499 阅读 · 0 评论 -
swap清除vector占用内存
vector与deque不同,其内存占用空间只会增长,不会减小。比如你首先分配了10,000个字节,然后erase掉后面9,999个,则虽然有效元素只有一个,但是内存占用仍为10,000个。所有空间在vector析构时回收。 empty()是用来检测容器是否为空的,clear()可以清空所有元素。但是即使clear(),所占用的内存空间依然如故。如果你需要空间动态缩小,可以考虑使转载 2010-03-17 14:21:00 · 3732 阅读 · 0 评论 -
sort()和stable_sort()
sort()和stable_sort()都對container做sort的動作,但對於相等的值,sort()和stable_sort()處理的方式不一樣,stable_sort()會保證不更改原先的順序,但sort()則不保證,有可能更改順序,但也有可能不改,這樣講還是很籠統我們想先依年齡排序,若年齡相同,則依姓名的字母排序在STL我們該怎麼寫呢?我們必須先對姓名排序,使用sort(),然转载 2010-03-23 12:23:00 · 554 阅读 · 0 评论 -
VC中加载LIB文件
MFC编写程序,都要用到动态链接库,MFC相关的动态库有MFCD42和MFC42等,MFC框架程序已经自动加载,那么如何引入第三方的动态链接库到工程中呢? 静态链接库是要先把程序中所需要使用的函数编译成机器码,保存在*.lib文件中。编译器会去*.lib中找出所需要的函数,并把这些函数的机器码复制一份,放在可执行文件中。将lib库引入工程,有下面3种方法。第一种方法,lib文件直接加入原创 2010-03-29 18:35:00 · 2049 阅读 · 0 评论 -
vc6.0出现应用程序错误
在VC6.0(With SP6)中点击File-Open无效,点击工具栏上的Open按钮则程序直接崩溃,Project-Add File To Project也不行,于是上网搜索,结果是VC6.0会与Visio冲突,解决办法是卸载Visio就OK了。原创 2010-03-30 08:51:00 · 385 阅读 · 0 评论 -
VC实现生产者-消费者问题
利用信号量和VC++程序设计环境实现生产者/消费者问题。 ///////////////////////////////////////////////////////////////////////! 定义信号量 HANDLE m_S_Producer; // Semaphore HANDLE m_S_Consumer; // Semaphore转载 2010-04-14 12:31:00 · 592 阅读 · 0 评论 -
.dll .lib使用
1、调用DLL的概述。 应用程序导入函数与DLL文件中的导出函数进行链接有两种方式:隐式链接和显式链接。所谓的隐式链接是指在应用程序中不需指明DLL文件的实际存储路径,程序员不需关心DLL文件的实际装载。而显式链接与此相反。 采用隐式链接方式,所有被应用程序调用的DLL文件都会在应用程序EXE文件加载时被加载在到内存中,程序员在建立一个DLL文件时,链接程序 (1.注意,链接转载 2010-04-19 19:12:00 · 322 阅读 · 0 评论 -
strtok读取以逗号分开的字符串
strtok 原型:extern char *strtok(char *s, char *delim); 用法:#include 功能:分解字符串为一组标记串。s为要分解的字符串,delim为分隔符字符串。 说明:首次调用时,s必须指向要分解的字原创 2010-05-12 13:05:00 · 818 阅读 · 0 评论 -
CFileDialog使用
CFileDialog文件选择对话框的使用:首先构造一个对象并提供相应的参数,构造函数原型如下:CFileDialog::CFileDialog( BOOL bOpenFileDialog, LPCTSTR lpszDefExt = NULL, LPCTSTR lpszFileName = NULL, DWORD dwFlags = OFN_HIDEREADONLY | OFN_OVERWRITE转载 2010-05-12 13:28:00 · 555 阅读 · 0 评论 -
C++中线程函数中方访问成员变量
创建线程时,线程函数如果要设置成类的成员函数,则必须是静态成员函数,在此函数中不能使用非静态成员变量,如果要使用非静态成员变量的话,比如在MFC中,最好不要将MFC类的指针传递给线程函数,最好是传句柄给线程,创建线程用AfxBeginThread,把this作为第二个参数传递。 线程函数是回调函数,因此它必须是静态成员函数或者是类外部声明的全局函数。全局线程函数:UINT Thread(p原创 2010-05-20 20:34:00 · 2249 阅读 · 0 评论 -
char*和CString转换
<br />(1) char*转换成CString<br /> 若将char*转换成CString,除了直接赋值外,还可使用CString::Format进行。例如:<br /> char chArray[] = "Char test";<br /> TCHAR * p = _T("Char test");( 或LPTSTR p = _T("Char test");)<br /> CString theString = chArray;<br />转载 2010-07-13 17:24:00 · 484 阅读 · 0 评论