随笔分类 -  MFC

摘要:int 转化为SCtring: int n =123; CString str; str.Format("%d",n);报错的话则改为:str.Format(_T("%d"),n); 或者str.Format(TEXT("%d"),n); 即可CString 转化为 int:CStringstr("123");intn=_ttoi(str); 阅读全文
posted @ 2013-10-10 23:57 紫清婷 阅读(16766) 评论(0) 推荐(0)
摘要:今天用vs2010打开vs2008的一个工程,报了好多错:1>e:\visual studio 2010\projects\imageprojects\morphology\morphology\MorphologyDoc.h(41): error C2146: 语法错误: 缺少“;”(在标识符“m_imgOrg”的前面)1>e:\visual studio 2010\projects\imageprojects\morphology\morphology\MorphologyDoc.h(41): error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持 阅读全文
posted @ 2013-08-19 22:11 紫清婷 阅读(3668) 评论(0) 推荐(0)
摘要:想在对话框显示出来后立即执行一段代码。方法之一是自定义消息,即添加一个自定义的消息在消息队列中等待对话框初始化之后从消息队列中读取消息执行代码。在OnInitDialog返回之前post一个自定义的消息,在消息的相应函数里执行代码利用类向导添加自定义消息WM_MY_PRIVATE,则生成如下消息响应函数,可以在自定义的消息响应函数里添加自己的代码:LRESULTMyAppDlg::OnPrivateMessage(WPARAM,LPARAM){return0;}当然,在消息映射表里会发现增加了一项:ON_MESSAGE(WM_MY_PRIVATE,&CdummyDlg::OnPriva 阅读全文
posted @ 2013-07-18 21:59 紫清婷 阅读(323) 评论(0) 推荐(0)
摘要://得到原始内容的长度int len =m_editPoemFileStr.GetLength();UpdateData(true);//得到新增加的内容CStringsNewString=m_editPoemFileStr.Mid( len,m_editPoemFileStr.GetLength()-len ); 阅读全文
posted @ 2013-07-18 21:53 紫清婷 阅读(1445) 评论(0) 推荐(0)
摘要:网上好多方法,比如强制转换:CStringstrTest=_T(“abcd”);char*buf=(LPSTR)(LPCTSTR)strTest;可是都只得到了第一个字符。后来,找到了原因。因为我的工程是基于UNICODE的,这样直接强制转换是不行的。给出了下面两种方法,我试了方法二,能解决问题:方法一:可以用API:WideCharToMultiByte进行转换方法二:添加文件#includeCStringstrTest=_T("abcd");USES_CONVERSION;LPSTR=T2A(strTest); 阅读全文
posted @ 2013-07-18 21:52 紫清婷 阅读(385) 评论(0) 推荐(0)
摘要:首先修改编辑框的属性:Multiline设为true,AutoHScroll设为true,AutoVScroll设为true。然后响应PreTranslateMessage(MSG*pMsg)这个消息,截获回车键。如图:从中可以看出,只需添加下面三行:m_editPoemFile.SetSel(-1,-1);//自动滚屏 m_editPoemFile.ReplaceSel(L"\r\n");//换行 UpdateData(true); // 其中m_editPoemFile为编辑框的控制变量。 阅读全文
posted @ 2013-07-14 14:03 紫清婷 阅读(970) 评论(0) 推荐(0)
摘要:哇~~~~~~~啦啦啦~~~~~~~~太开心了,通过不断的尝试,我终于知道怎么更改VS2010的工程名了!!!下面分享给大家:1.打开自己想要更改名字的工程,用ctrl+h在整个项目中把想更改的名字替换成新的名字。2.关闭工程,找到工程文件夹的位置,然后手动更改里面所有包含旧名字的文件及文件夹的名字(.cpp文件,.h文件,.vcxproj文件,……),还包括res文件夹下图标,图片等的名字。3.用记事本分别打开.sln文件和.suo文件,以及.vcxproj文件和.vcxproj.filters文件,用ctrl+h继续把想更改的名字替换成新的名字。4.删除Debug中的东东~~~5.打开工程 阅读全文
posted @ 2013-06-22 12:57 紫清婷 阅读(1350) 评论(2) 推荐(0)
摘要:之前一直在找有木有好点的方法。现在终于被我找到,收藏之~~~~~~在使用mfc的时候经常遇到自定义类访问主对话框控件的问题,例如自定义类中的方法要输出一段字符串到主对话框的EDIT控件、控制对话框的进度条等。要在自定义的类中访问主对话框空间,须获得主对话的指针。主对话框的对象在app类的InitInstance()方法中声明。查看app类的cpp文件,在InitInstance()方法中有如下语句:CAppDlgdlg;m_pMainWnd =&dlg; 主对话框指针被传给m_pMainWnd 成员,按f12查看其定义,发现m_pMainWnd是在afxwin.h中声明的成员: CWn 阅读全文
posted @ 2013-06-20 23:53 紫清婷 阅读(1989) 评论(0) 推荐(0)
摘要:1、新建一个基于对话框的工程MyLink,在对话框中拖一个Static控件,ID可改为IDC_SLink。2、在头文件中添加成员变量:private:CRectm_Rect;CFont*m_cfNtr;CFontm_cfUL;LOGFONT m_lfNtr, m_lfUL;COLORREF m_color;CBrushm_brush;3、在.cpp文件中利用类向导添加初始化虚函数,并添加代码:BOOL CMyLinkDlg::OnInitDialog(){ CDialog::OnInitDialog(); // 将“关于...”菜单项添加到系统菜单中。 // IDM_ABOU... 阅读全文
posted @ 2013-06-19 00:38 紫清婷 阅读(11575) 评论(0) 推荐(0)
摘要:1、CSting->std::string如果不是unicode可以直接转换:CString cs("Hello");std::string s((LPCTSTR)cs);如果是unicode的话:CString cs ("Hello");CT2CA pszConvertedAnsiString (cs);std::string strStd (pszConvertedAnsiString); 2、 std::string->CString:std::string s("Hello");CString cs(s.c_str 阅读全文
posted @ 2013-06-13 00:43 紫清婷 阅读(564) 评论(0) 推荐(0)
摘要:在MFC中将std::string转换为LPCTSTR的方法,在网上找了好久,终于被我发现了。http://blog.sina.com.cn/s/blog_6f7e64f801014sjo.html需要自己写一个转换函数:std::wstring StoWs(const std::string& s){int len;int slength = (int)s.length() + 1;len = MultiByteToWideChar(CP_ACP, 0, s.c_str(), slength, 0, 0);wchar_t* buf = new wchar_t[len];MultiBy 阅读全文
posted @ 2013-06-13 00:29 紫清婷 阅读(5533) 评论(0) 推荐(0)
摘要:在这次项目中,需要实现语音播放功能。但是发现在播放语音时,无法进行其他操作。然后想到了多线程。可是从没有用过所谓的多线程,故在此记下自己第一次学习使用的多线程。首先,创建一个线程:void CLXTDlg::OnBnClickedButtonVoice(){ hThread = CreateThread( NULL, // SD 0, // initial stack size (LPTHREAD_START_ROUTINE)ThreadProc, // thread function NULL, ... 阅读全文
posted @ 2013-06-11 21:26 紫清婷 阅读(741) 评论(0) 推荐(0)
摘要:想在线程里获取对话框上编辑框中的内容,我知道首先要获取主窗口的句柄,然后再获取控件的句柄。但百度了好久好久,都没有得到解决。直到看到下面这篇博客,才解决了我的问题。http://hi.baidu.com/magic_james/item/1298e9c486a7f26bf7c95d89实现办法如下:CString str;CWnd* h_d = AfxGetApp()->GetMainWnd(); //获取主窗口的句柄h_d->GetDlgItem(IDC_APOETRY_EDIT)->GetWindowText(str); //IDC_APOETRY_EDIT为编辑框的ID 阅读全文
posted @ 2013-06-11 21:12 紫清婷 阅读(582) 评论(1) 推荐(0)
摘要:方法一:直接给CButton加图片。1.在资源编辑器中添加一个按钮,把它的Bitmap属性设为true2.在按钮上点右键,添加一个变量m_Btn(CButton类型的)3.将图片导入到资源管理器中,ID为IDB_BITMAP14.然后在初始化中加入如下代码:HBITMAPhBmp=::LoadBitmap(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_BITMAP1));m_Btn.SetBitmap(hBmp); 如果是加载非资源图片的话,就在初始化中加入下代码: HBITMAP hBitmap=(HBITMAP)::LoadImage( NULL,. 阅读全文
posted @ 2013-06-10 19:03 紫清婷 阅读(23739) 评论(0) 推荐(0)
摘要:1、添加BMP格式的背景图片到“Bitmap”资源里。若无BMP格式的图片,可以通过画图等工具打开原图片后另存为BMP格式即可。2、在对话框的.cpp文件中找到:void CXXXDlg::OnPaint(),然后在if()...else()中的else()下添加如下代码: else { //CDialog::OnPaint();//要禁止这个调用 CPaintDC dc(this); CRect rect; GetClientRect(&rect); CDC dc... 阅读全文
posted @ 2013-06-10 18:22 紫清婷 阅读(770) 评论(0) 推荐(0)
摘要:使用Tab Control 控件时,需要建子对话框。我想实现点击标签上的List Control控件时,主对话框上的编辑框控件能得到更新。然而List Control控件是在子对话框上。百度了好久,有人说主对话框不能处理子对话框的消息,即点击标签时无法通知主对话框。解决办法: 在子对话框中通过GetParent()获取主对话框的指针,然后就可以调用它的成员了。 注意:一般Tab控件的父窗口是主对话框,Tab控件子对话框的父窗口是Tab控件,所以现在Tab控件子对话框中获取父窗口(即Tab控件),然后利用Tab控件获取父窗口(即主对话框)。如下面代码:void CPoetrySortDlg::O 阅读全文
posted @ 2013-06-07 21:57 紫清婷 阅读(2201) 评论(0) 推荐(0)
摘要:对于使用Tab Control 给对话框加属性页的方法有很多,下面记录下感觉比较方便点的方法。(也是来自网上的资料,只是稍加整理)首先需要自己建一个类,如:CTabSheet。这个类是从CTabCtrl继承来的,是用于Tab Control的控件类。添加成员变量: CDialog* m_pPages[MAXPAGE]; //记录各子对话框的指针 int m_nNumOfPages; int m_nCurrentPage; UINT m_IDD[MAXPAGE]; LPCTSTR m_Title[MAXPAGE];记得这个:#define MAXPAGE 20 //该类所能加载的标签的最大值然后 阅读全文
posted @ 2013-06-07 21:39 紫清婷 阅读(1944) 评论(1) 推荐(1)
摘要:实现的功能:在单选列表视图控件中显示一个简单的编程语言排行榜,然后在用鼠标左键选择某列表项时,将选中列表项的文本显示到编辑框中。下面是具体实现步骤: 1. 创建一个基于对话框的MFC工程,名称设置为“Example29”。 2. 在自动生成的对话框模板IDD_EXAMPLE29_DIALOG中,删除“TODO: Place dialog controls here.”静态文本控件、“OK”按钮和“Cancel”按钮。添加一个List Control控件,ID设置为IDC_PROGRAM_LANG_LIST,View属性设为Report,即为报表风格,Single Selection属性设为Tr 阅读全文
posted @ 2013-06-06 00:29 紫清婷 阅读(1424) 评论(0) 推荐(0)
摘要:昨天学习了Tab Control控件,可是了遇到问题:运行程序后,Tab Control 控件就是显示不出来。搞了很久都不知道咋回事,后来终于被我发现了问题所在。原来是因为Group Box 控件覆盖掉了我的Tab Control 控件。我之前是先拖进去一个Group Box控件,然后在Group Box控件的框里再放置了一个Tab Control控件的。这样运行出来就看不到Tab Control控件。解决办法是:先放置好Tab Control控件,然后再重新拖进一个Group Box控件,摆放好,这样Group Box控件就不会覆盖掉Tab Control控件了。 阅读全文
posted @ 2013-06-04 09:52 紫清婷 阅读(2248) 评论(0) 推荐(0)
摘要:实现的功能: 在一个标签控件中加入两个标签页,标签文本分别为“标签1”和“标签2”,点击不同的标签显示不同的标签页。具体步骤如下: 1. 创建一个基于对话框的MFC工程,名称设置为“TestTap”。 2. 在自动生成的对话框模板IDD_TESTTAP_DIALOG中,删除“TODO: Place dialog controls here.”静态文本框、“OK”按钮和“Cancel”按钮。添加一个Tab Control控件,并为其关联一个CTabCtrl类型的控件变量m_tab。 3. 添加两个基于MFC对话框的类,类名为CTab1Dlg,CTab2Dlg。在资源视图里,就自动新生成了两个对话 阅读全文
posted @ 2013-06-04 09:35 紫清婷 阅读(1281) 评论(0) 推荐(0)