博文

vc++常用函数(2006-12-31 17:04:00)

摘要:1)字符转换函数
char *_itoa( int value, char *string, int radix );
char *_i64toa( __int64 value, char *string, int radix );
char * _ui64toa( unsigned _int64 value, char *string, int radix );
wchar_t * _itow( int value, wchar_t *string, int radix );
wchar_t * _i64tow( __int64 value, wchar_t *string, int radix );
wchar_t * _ui64tow( unsigned __int64 value, wchar_t *string, int radix );
double atof( const char *string );
int atoi( const char *string );
__int64 _atoi64( const char *string );
long atol( const char *string );
int sprintf( char *buffer, const char *format [, argument] ... );
int swprintf( wchar_t *buffer, const wchar_t *format [, argument] ... );
void CString::Format( LPCTSTR lpszFormat, ... );
void CString::Format( UINT nFormatID, ... );
其他方法:
可以用CString类的Format()方法,具体实现如下:
int i = 2008;
CString str;
str.Format("%d", i);
这样就OK了。
函数解析:
CString::Format
void Format( LPCTSTR lpszFormat, ... ); ......

阅读全文(5327) | 评论:0

用VC++做一个象模象样的记事本(文本编辑器)续2(2006-12-30 09:51:00)

摘要:用VC++做一个象模象样的记事本(文本编辑器)续2
之前步骤见《用VC++做一个象模象样的记事本(文本编辑器)》及续1
生成的编辑器还没有右键菜单,所以得自己添加,接下来准备为文本编辑器添加右键弹出菜单。
1、由于已经建立了一个类CMyRichEdit,因此为它增加右键响应函数。打开MFC ClassWizard 的MessageMaps,“Class name”选择“CMyRichEdit”,“Object IDs”选择“CMyRichEdit”,“Messages”选择“WM_RBUTTONDOWN”生成“ON_WM_RBUTTONDOWN”函数。
2、为CMyRichEdit::RButtonDown函数添加内容如下:
void CMyRichEdit::OnRButtonDown(UINT nFlags, CPoint point)
{
 //设置为焦点
 SetFocus();
 //创建一个弹出式菜单
 CMenu popmenu;
 popmenu.CreatePopupMenu();
 //添加菜单项目
 popmenu.AppendMenu(0, ID_MENU_EDIT_UNDO, "&Undo");
 popmenu.AppendMenu(0, MF_SEPARATOR);
 popmenu.AppendMenu(0, ID_MENU_EDIT_CUT, "&Cut");
 popmenu.AppendMenu(0, ID_MENU_EDIT_COPY, "C&opy");
 popmenu.AppendMenu(0, ID_MENU_EDIT_PASTE, "&Paste");
 //初始化菜单项
 UINT nUndo=(CanUndo() ? 0 : MF_GRAYED );
 popmenu.EnableMenuItem(ID_MENU_EDIT_UNDO, MF_BYCOMMAND|nUndo);
 UINT nSel=((Get......

阅读全文(5425) | 评论:1

用VC++做一个象模象样的记事本(文本编辑器)续1(2006-12-29 14:27:00)

摘要:用VC++做一个象模象样的记事本(文本编辑器)续1
之前步骤见《用VC++做一个象模象样的记事本(文本编辑器)》 接下来准备为文本编辑器添加编辑菜单。
1、<插入>-<新建类>,添加一个新的类,以便对RICHEDIT控件进行更好的操作。
  类名:CMyRichEdit( BaseClass: CRichEditCtrl ),添加完毕会增加MyRichEdit.h和MyRichEdit.cpp两个新文件。
2、在对话框主文件“TextEditDlg.h”的开头,引入刚刚新添加的类的头文件:“ #include "MyRichEdit.h" ”
3、在CTextEditDlg类的定义中,改变原来RICHEDIT控件的类:
class CTextEditDlg : public CDialog
{......
//CRichEditCtrl m_MyRichEdit; //原来
  CMyRichEdit m_MyRichEdit; //现在
......}
4、为新建的CMyRichEdit类添加一些编辑处理函数(大多数继承CRICHEDITCTRL的处理函数就可以了):
(MyRichEdit.h)
class CMyRichEdit : public CRichEditCtrl
{......
protected:
 //{{AFX_MSG(CMyRichEdit)
 afx_msg void OnRButtonDown(UINT nFlags, CPoint point);//点击右键弹出菜单的函数,不需手工添加
 afx_msg void OnCopy() { Copy(); }
 afx_msg void OnCut() { Cut(); }
 afx_msg void OnPaste() { Paste(); }
 afx_msg void OnUndo() { Undo(); }
......}
5、打开程序的菜单资源,添加以下菜单:
“编辑”(根目录)
“复制”ID_MEMU_EDIT_CO......

阅读全文(6325) | 评论:0

用VC++做一个象模象样的记事本(文本编辑器)(2006-12-25 14:43:00)

摘要:1,新建,工程,MFC AppWizard(exe),(名字定一个,例如:TextEdit)。
2,工程选择采用对话框模式。
3,把对话框上的按钮全部删除,并添加一个RICHEDIT控件。
4,打开TextEdit.cpp文件,在“BOOL CTextEditApp::InitInstance()”函数的第一行添加一行:“::AfxInitRichEdit();”
5,打开MFC ClassWizard 的 MemberVariables,为IDC_RICHEDIT1添加一个控件名“m_MyRichEdit”
6,运行一下,可以看到界面了。
7,点“插入”-“资源”,增加一个菜单资源(IDR_MENU1)。
8,打开菜单资源,添加菜单:
“文件”(根目录)
“新建”ID_MEMU_FILE_NEW
“打开”ID_MEMU_FILE_OPEM
“保存”ID_MEMU_FILE_SAVE
“退出”ID_MEMU_FILE_EXIT
“编辑”(根目录)
    。。。等等
9,将菜单资源装入程序中,做法是在对话框类定义中添加以下代码:
class CTextEditDlg : public CDialog
{......
 CMenu m_menu;
......}
然后在对话框类的初始化函数中添加代码:
BOOL CTextEditDlg::OnInitDialog()
{
 CDialog::OnInitDialog();
......
 //加载菜单
 m_menu.LoadMenu(IDR_MENU1);
 //设置当前菜单
 SetMenu(&m_menu);
 //当你不需要菜单时可以用 SetMenu(NULL);来取消当前菜单
......}
10,运行一下,这时候菜单应出现了。
11,然后在MFC ClassWizard 为每个菜单项目添加响应函数,具体代码如下:
void CTextEditDlg::OnMemuFileOpen()
{......

阅读全文(10253) | 评论:9

用VC++制作最简单的文本编辑器(2006-12-22 16:50:00)

摘要:1,新建,工程,MFC AppWizard(exe),(名字定一个,例如:TextEdit)。
2,工程选择采用对话框模式。
3,在对话框上添加一个RICHEDIT控件和一个按钮控件(Open)。
4,打开TextEdit.cpp文件,在“BOOL CTextEditApp::InitInstance()”函数的第一行添加一行:“::AfxInitRichEdit();”
5,运行一下,可以看到界面了。
6,打开MFC ClassWizard 的 MemberVariables,为IDC_RICHEDIT1添加一个控件名“m_MyRichEdit”
7,为Open按钮的单击函数添加以下代码:
void CTextEditDlg::OnButtonOpen()
{
//显示文件打开对话框
CFileDialog dlg(TRUE, "SQL", "*.txt",OFN_HIDEREADONLY
|OFN_OVERWRITEPROMPT,"Text Files(*.txt)|*.txt|SQL Files(*.sql)|*.sql|All Files(*.*)|*.*||");
if ( dlg.DoModal()!=IDOK ) return;
//获取文件的绝对路径
CString sFileName=dlg.GetPathName();
//打开文件
CStdioFile out;
out.Open(sFileName, CFile::modeRead);
CString sSql="",s;
//读取文件
do{
out.ReadString(s);
sSql=sSql+s+(char)10;
}
while (out.GetPosition()!=out.GetLength());
out.Close();
m_MyRichEdit.SetWindowText(sSql);
}
8,记得把RICHEDIT的属性中构选Multiline。
9,再运行一次,文本编辑器做完..........

阅读全文(7711) | 评论:0

一些有用的VC++技术网页连接(2006-12-22 14:45:00)

摘要:开一个页面来收集一些比较好的VC++主页,免得老翻搜索引擎: http://wdswei.spaces.live.com/
有不少VC的常用功能的代码介绍 http://blog.programfan.com/article.asp?id=10690
VC++ 的串口通讯,包括使用window控件和直接用VC++访问两种方法的介绍 http://www.is.pku.edu.cn/~qzy/books/cppl/index_all.htm
《C++程序设计语言》索引(全部)......

阅读全文(3186) | 评论:0

VC++编程打开一个文本文件的例子(2006-12-20 17:09:00)

摘要:vc++的编程不容易,有时候想实现打开一个文本文件这么简单的功能都挺麻烦的(相对DELPHI),在网上找到一个例子,经修正后列出来。 void CMainFrame::OnFileOpen()
{
//显示文件打开对话框
CFileDialog dlg(TRUE, "SQL", "*.txt",OFN_HIDEREADONLY
|OFN_OVERWRITEPROMPT,"Text Files(*.txt)|*.txt|SQL Files(*.sql)|*.sql|All Files(*.*)|*.*||");
if ( dlg.DoModal()!=IDOK ) return;
//获取文件的绝对路径
CString sFileName=dlg.GetPathName();
//打开文件
CStdioFile out;
out.Open(sFileName, CFile::modeRead);
CString sSql="",s;
//读取文件
do{
out.ReadString(s);
sSql=sSql+s+(char)10;
}
while (out.GetPosition()!=out.GetLength());
out.Close();
AfxMessageBox(sSql);
 } 另有一个方法如下:
 CStdioFile myFile;
   CString ReadFileString;
 if(myFile.Open("C:\\Readme.txt", Cfile::modeRead) == TRUE)
 {
  while(myFile.ReadString(ReadFileString) != FALSE)
  { 
     //... 处理代码 
  }
 }

另外还有一个保存的例子,不过还没经过亲自测试: /**********......

阅读全文(12983) | 评论:9

[ZT]VC++的网上教程(2006-11-30 09:53:00)

摘要:VC++教程 第一课 Windows编程和面向对象技术(2005-9-30)
1 2 3 VC++教程 第二课 使用Visual C++ 5.0(2005-9-30)
1 2 3 4 VC++教程 第三课 窗口、菜单与消息框(2005-10-1)
1 2 3 4 5 6 7  VC++教程 第四课 工具条和状态栏(2005-10-1)
1 2 3 VC++教程 第五课 对话框(2005-10-3)
1 2 3 4 转贴自:http://xz7.2000y.net/mb/2/smallclass.asp?typeid=11382&bigclassid=78495&smallclassid=0 『C程序设计』读书笔记:
http://www.vczx.com/minute/c.php......

阅读全文(3563) | 评论:0

[ZT]VC小技巧(1)(2006-11-30 09:12:00)

摘要:(1) 如何通过代码获得应用程序主窗口的 指针?
主窗口的 指针保存在CWinThread::m_pMainWnd中,调用AfxGetMainWnd实现。
AfxGetMainWnd() ->ShowWindow(SW_SHOWMAXMIZED)
//使程序最大化.
(2) 确定应用程序的路径
Use GetModuleFileName 获得应用程序的路径,然后去掉可执行文件名。
Example:
TCHAR
exeFullPath[MAX_PATH] // MAX_PATH在API中定义了吧,好象是
128
GetModuleFileName(NULL,exeFullPath,MAX_PATH)   (3) 如何在程序中获得其他程序的 图标?
两种方法:
(1) SDK函数 SHGetFileInfo 或使用 ExtractIcon获得图标资源的 handle,
(2) SDK函数 SHGetFileInfo 获得有关文件的很多信息,如大小图标,属性, 类型等.
Example(1):
在程序窗口左上角显示 NotePad图标.
void CSampleView:
OnDraw(CDC * pDC)
{
if( :: SHGetFileInfo(_T("c:\\pwin95\\notepad.exe"),0,
&stFileInfo,sizeof(stFileInfo),SHGFI_ICON))
{
pDC ->DrawIcon(10,10,stFileInfo.hIcon)
}
}
Example(2):同样功能,Use ExtractIcon Function
void CSampleView:: OnDraw(CDC *pDC)
{
HICON hIcon=:: ExtractIcon(AfxGetInstanceHandle(),_T
("NotePad.exe"),0)
if (hIcon &&hIcon!=(HICON)-1)
pDC->DrawIcon(10,10,hIcon)
}
 &......

阅读全文(3123) | 评论:0

[ZT]VC小技巧(2)(2006-11-30 09:12:00)

摘要:(26) 如何编程结束应用程序?
这是个很简单又是编程中经常要遇到的问题.
向窗口发送 WM_CLOSE消息,调用 CWnd::OnClose成员函数.允许对用户提示是否保存修改过的数据.
Example: AfxGetMainWindow()->SendMessage(WM_CLOSE) 还可以创建一个自定义的函数 Terminate Window
void Terminate Window(LPCSTR pCaption)
{
CWnd *pWnd=Cwnd::FindWindow(NULL,pCaption) if (pWnd) pWnd ->SendMessage(WM_CLOSE)
}     说明: FindWindow函数不是提倡的做法,因为它无法处理标题栏自动改变,比如我们要检测 Notepad是不是已运行而事先不知道Notepad的标题栏,这时FindWindow就无能为力了,可以通过枚举 windows任务列表的办法来实现。在机械出版社"Windows 95 API开发人员指南"一书有比较详细的介绍,这里就不再多说乐。 (27) 如何创建和使用无模式对话框
MFC将模式和无模式对话封装在同一个类中,但是使用无模式对话需要几个对话需要几个额处的步骤。首先,使用资源编辑器建立对话资源并使用ClassWizard创建一个CDialog的派生类。模式和无模式对话的中止是不一样的:模式对话通过调用CDialog : : EndDialog 来中止,无模式对话则是调用CWnd: : DestroyWindow来中止的,函数CDialog : : OnOK和CDialog : : OnCancel调用EndDialog ,所以需要调用DestroyWindow并重置无模式对话的函数。
void CSampleDialog : : OnOK ( )
{
// Retrieve and validate dialog data .
if (! UpdateData (TRUE) )
{
// the UpdateData rountine
will set focus to correct item TRACEO (" Up......

阅读全文(3755) | 评论:0