05 2011 档案

摘要:将普通的类转化成MFC Dll,只需要将将一个类的头文件的声明上加上AFX_EXT_CLASS即可,比如一个对话框类class CMyDlg : public CDialog,如果想将其改为MFC Dll项目,则可以新建一个MFC Dll项目,选择第三个“扩展MFC Dll”,点“完成”,将CMyDlg类的头文件和实现文件添加到该项目中,然后将CMyDlg的头文件声明改为:class AFX_EXT_CLASS CMyDlg:public CDialog,然后编译该项目,这样会产生一个“项目名称.dll”文件和“项目名称.lib”文件,如果想在别的项目使用该dll文件,只需将该类的头文件、“项 阅读全文
posted @ 2011-05-31 23:21 MagiCube 阅读(1688) 评论(0) 推荐(0)
摘要:DLGTEMPLATE和DLGITEMTEMPLATE一般后面直接跟3个word数组,通常他们都是按照DWORD对齐的,三个数组分别表示menu、class和title,DLGITEMTEMPLATE是紧跟着DLGTEMPLATE出现的,可以有多个,每个表示DLGTEMPLATE中的一个控件。这个vc sample中的dlgtemp的示例中有介绍: // The first step is to allocate memory to define the dialog. The information to be // stored in the allocated buffer is the 阅读全文
posted @ 2011-05-19 23:24 MagiCube 阅读(3106) 评论(0) 推荐(0)
摘要:int num1,num2,num3; char ch1[10],ch2[10],ch3[10]; SendDlgItemMessage(IDC_EDIT1,WM_GETTEXT,10,(LPARAM)ch1); SendDlgItemMessage(IDC_EDIT2,WM_GETTEXT,10,(LPARAM)ch2); num1=atoi(ch1); num2=atoi(ch2); num3=num1+num2; itoa(num3,ch3,10); SendDlgItemMessage(IDC_EDIT3,WM_SETTEXT,0,(LPARAM)ch3); SendDlgItemM. 阅读全文
posted @ 2011-05-17 20:47 MagiCube 阅读(155) 评论(0) 推荐(1)
摘要:MSDN上的定义:TCHAR.H routine _UNICODE & _MBCS not defined _MBCS defined _UNICODE defined_stprintf_s sprintf_s sprintf_s swprintf_s_stscanf_s sscanf_s sscanf_s swscanf_s从上我们可以看出,_stprintf_s和_stscanf_s是为适应不同编码而定义的两个宏,在不同的编码环境下他们所表示的函数是不同的。1.int sprintf_s( char *buffer, size_t sizeOfBuffer, const char 阅读全文
posted @ 2011-05-13 00:10 MagiCube 阅读(11364) 评论(0) 推荐(0)
摘要:如何从一个对话框获取另一个对话框中的成员值,一种方法就是在对话框中定义一个返回该成员值的函数,在另一个对话框中调用该函数。 CDialog dlg; if (dlg.DoModal() == IDOK) m_iRate = dlg.GetRate(); 阅读全文
posted @ 2011-05-12 23:54 MagiCube 阅读(307) 评论(0) 推荐(0)
摘要:BOOL EnumWindows( WNDENUMPROC lpEnumFunc, LPARAM lParam );该函数枚举所有屏幕上的顶层窗口,并将窗口句柄传送给应用程序定义的回调函数,其中lParam是传递给lpEnumFunc的参数。回调函数返回FALSE将停止枚举,否则EnumWindows函数继续到所有顶层窗口枚举完为止。例如获取所有的桌面窗口句柄,并将其值放到CListBox中:BOOL CALLBACK EnumWindowsProc(HWND hwnd, LPARAM lParam){ static TCHAR szBuffer[90]; static TCHAR szTem 阅读全文
posted @ 2011-05-12 23:51 MagiCube 阅读(12949) 评论(0) 推荐(0)
摘要:主要运用RepositionBars()函数,对对话框中的控件进行布局,代码放在OnInitDialog()中:BOOL C************::OnInitDialog(){ CModelessDialog::OnInitDialog(); // Create status bar at the bottom of the dialog window if (m_statusBar.Create(this)) { m_statusBar.SetIndicators(m_lpaIDStatusBar, m_cIDStatusBar); OnSetMessageString(AFX_IDS 阅读全文
posted @ 2011-05-12 20:16 MagiCube 阅读(1358) 评论(0) 推荐(0)
摘要:一.类型简介1.CString:动态的TCHAR数组。它是一个完全独立的类,封装了“+”等操作符和字符串操作方法,换句话说就是CString是对TCHAR操作的方法的集合。2.LPCTSTR:常量的TCHAR指针,其定义为 typedef const TCHAR* LPCTSTR其中 L表示long指针 这是为了兼容Windows 3.1等16位操作系统遗留下来的,在win32中以及其他的32位操作系统中, long指针和near指针及far修饰符都 是为了兼容的作用。没有实际意义。P表示这是一个指针C表示是一个常量T表示在Win32环境中, 有一个_T宏STR表示这个变量是一个字符串。2.L 阅读全文
posted @ 2011-05-12 19:31 MagiCube 阅读(7971) 评论(0) 推荐(4)
摘要:要在vc中使用string类型,必须包含下列头文件:#include<string>#include<iostream>using namespace std; 阅读全文
posted @ 2011-05-12 19:17 MagiCube 阅读(516) 评论(0) 推荐(0)
摘要:一般情况下我们用UPDATE_COMMAND_UI来修改菜单的状态(enable/disable, check/uncheck, change text),但这个方法在一个基于对话框上的菜单却没有效果。//这个方法在MDI、SDI程序中都能起作用,在对话框中却没有效果,根本没有调用这个函数void CTestDlg::OnUpdateFileExit(CCmdUI* pCmdUI) { pCmdUI->Enable(FALSE); pCmdUI->SetCheck(TRUE); pCmdUI->SetRadio(TRUE); pCmdUI->SetText(" 阅读全文
posted @ 2011-05-11 23:20 MagiCube 阅读(502) 评论(0) 推荐(0)
摘要:MFC窗口位置管理详细分析及实例 在一般用MFC编写的程序的窗口客户区中,可能有好几个子窗口(具有WM_CHILD风格的窗口)。上边是工具栏,中间是视图窗口,下边是状态栏。三个窗口在框架的客户区里和平共处,互不重叠。主框架窗口的尺寸改变了,别的子窗口都能及时调整自己的尺寸以便保持相互位置关系不变,例如状态条窗口总能保持在主框架客户区底部,并且其宽度总能和主框架客户区宽度一致。工具栏窗口总能停靠在主框架的某一边不变,其宽度或高度总能和主框架客户区的宽度或高度一致,视图窗口总能填满主框架客户区的剩余空间。假如我们自己从CWnd类派生一个窗口类并生成一个窗口,在它的客户区里要生成若干个子窗口,我们想 阅读全文
posted @ 2011-05-11 21:53 MagiCube 阅读(448) 评论(0) 推荐(0)
摘要:今天在写代码的时候碰到这样的问题,网上查了一下,做了以下整理:CString 和 LPCTSTR 可以说通用。 原因在于CString定义的自动类型转换,没什么奇特的,最简单的C++操作符重载而已。常量字符串ansi和unicode的区分是由宏_T来决定的。但是用_T( "abcd ")时, 字符串 "abcd "就会根据编译时的是否定一_UNICODE来决定是char* 还是 w_char*。 同样,TCHAR 也是相同目的字符宏。 看看定义就明白了。简单起见,下面只介绍 ansi 的情况,unicode 可以类推。ansi情况下,LPCTSTR 就是 阅读全文
posted @ 2011-05-09 23:24 MagiCube 阅读(9797) 评论(0) 推荐(1)
摘要:LPCTSTR AFXAPI AfxRegisterWndClass( UINT nClassStyle, HCURSOR hCursor = 0, HBRUSH hbrBackground = 0, HICON hIcon = 0 ); 可以简单修改一个窗口的注册类,当然也可以用SetWindowsLong()来实现。 阅读全文
posted @ 2011-05-05 23:42 MagiCube 阅读(335) 评论(0) 推荐(0)
摘要:ASSERT(Expression),VERIFY(Expression)等当Expression为False的时候起作用。 阅读全文
posted @ 2011-05-05 23:39 MagiCube 阅读(135) 评论(0) 推荐(0)
摘要:实现CListBox的自绘功能,可以重载这三个函数:MeasureItem()、DrawItem()、CompareItem(),同时要给CListBox控件的OwnerDraw属性设置成为variable。typedef struct tagDRAWITEMSTRUCT { UINT CtlType; UINT CtlID; UINT itemID; UINT itemAction; UINT itemState; HWND hwndItem; HDC hDC; RECT rcItem; ULONG_PTR itemData; } DRAWITEMSTRUCT; 中的itemAction表示 阅读全文
posted @ 2011-05-05 23:38 MagiCube 阅读(671) 评论(0) 推荐(0)
摘要:在CTreeCtrl等控件中实现drag时,相应图标也随着drag主要是使用CImageList对象中的DrapEnter、DrapLeave、DragMove等方法来实现的。更改CTreeCtrl中item的值:ON_NOTIFY_REFLECT(TVN_ENDLABELEDIT, OnEndLabelEdit) void CMyTreeCtrl::OnEndLabelEdit(LPNMHDR pnmhdr, LRESULT *pLResult){ TV_DISPINFO *ptvinfo; ptvinfo = (TV_DISPINFO *)pnmhdr; if (ptvinfo->i 阅读全文
posted @ 2011-05-05 23:36 MagiCube 阅读(479) 评论(0) 推荐(0)