博文

用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,再运行一次,文本编辑器做完..........

阅读全文(7804) | 评论: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++程序设计语言》索引(全部)......

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

[ZT]常用C#函数表(2006-12-20 17:17:00)

摘要:查找VC++的常用函数真是麻烦,干脆找个C#的来顶替一下...(以下内容为转载) 记得看Stanley的C# primer的时候,这个大牛说学C#就是记住.net里面三千过函数怎么用就可以了:)果然是大牛,说的话都这么牛.
1、DateTime 数字型
System.DateTime currentTime=new System.DateTime();
1.1 取当前年月日时分秒
currentTime=System.DateTime.Now;
1.2 取当前年
int 年=currentTime.Year;
1.3 取当前月
int 月=currentTime.Month;
1.4 取当前日
int 日=currentTime.Day;
1.5 取当前时
int 时=currentTime.Hour;
1.6 取当前分
int 分=currentTime.Minute;
1.7 取当前秒
int 秒=currentTime.Second;
1.8 取当前毫秒
int 毫秒=currentTime.Millisecond;
(变量可用中文)2、Int32.Parse(变量) Int32.Parse("常量")
字符型转换 转为32位数字型 3、 变量.ToString()
字符型转换 转为字符串
12345.ToString("n"); //生成 12,345.00
12345.ToString("C"); //生成 ¥12,345.00
12345.ToString("e"); //生成 1.234500e+004
12345.ToString("f4"); //生成 12345.0000
12345.ToString("x"); //生成 3039 (16进制)
12345.ToString("p"); //生成 1,234,500.00%
4、变量.Length 数字型
取字串长度:
如: string str="中国";
int Len = str.Length ; //Len是自定义变量, str是求测......

阅读全文(2903) | 评论:2

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)
  { 
     //... 处理代码 
  }
 }

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

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

Winsock控件的属性及其描述(2006-12-05 08:59:00)

摘要:Winsock控件建立在TCP、UDP协议的基础上,完成与远程计算机的通信。即使对TCP/IP不太熟悉的用户,使用该控件也可以在十几分钟内创建一个简单的客户机/服务器程序。下面我们对Winsock控件的事件、方法、属性按其在程序中出现的顺序分别作详细的介绍,以便更好地理解程序源代码。   服务器程序的实现过程是:   (1)服务器程序必须设置好LocalPort属性,作为侦听端口,该值为一个整数(只要是一个其它TCP/IP应用程序没有使用过的值即可)。   (2)使用Listen方法进入侦听状态,等待客户机程序的连接请求。   (3)客户机程序发出连接请求,使服务器程序产生ConnectionRequest事件,该事件得到一个参数requestID。   (4)服务器程序用Accept方法接受客户机程序的requestID请求。这样,服务器程序就可以用SendData方法发送数据了。Accept方法必须用上一步得到的requestID作为其参数。   (5)当服务器程序接收到数据时,产生DataArrival事件,参数BytesTotal包含接收到的数据字节数。在该事件中,可以用GetData方法接收数据。   (6)如果接受到Close事件,则用Close方法关闭TCP/IP连接。   客户机程序的实现过程是:   (1) 客户程序设置Remotehost属性,以便指定运行服务器程序的主机 名,该字符串可在"控制面板|网络|标识|计算机名"中查到。   (2) 设置RemotePort属性,以便指定服务器程序的侦听端口。   (3)使用Connect方法,向服务器提出连接请求。   (4)服务器接受客户机程序的请求,客户机程序产生Connect事件,就可以用SendData方法发送数据了。   (5)当客户机程序接收到数据时,产生DataArrival事件,参数BytesTotal包含接收到的数据字节数。在该事件中,可以用GetData方法接收数据。   (6)如果接受到Close事件,则用Close方法关闭连接。   Winsock控件还有两个重要的属性,即Protocol和State。Protocol设定使用的协议是TCP还是UDP:取值sckTCPProtocol表示TCP, 取值sckUDPPro......

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

[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......

阅读全文(3663) | 评论: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)
}
 &......

阅读全文(3166) | 评论: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......

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

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

摘要:(51) 如何访问预定义的GDI对象
可以通过调用CDC:: SlectStockObject使用Windows的几个预定义的对象,诸如刷子、笔以及字体。下例使用了Windows预定义的笔和刷子GDI对象在视窗中画一个椭圆。
//Draw ellipse using stock black pen and gray brush.
void CSampleView:: OnDraw (CDC* pDC)
{
//Determine size of view.
CRect rcView
GetClientRect (rcView) //Use stock black pen and stock gray brush to draw ellipse.
pDC->SelectStockObject (BLACK_PEN)
pDC->SelectStockObject (GRAY_BRUSH)
//Draw the ellipse.
pDC->Ellipse (reView)
} 也可以调用新的SDK函数GetSysColorBrush获取一个系统颜色刷子,下例用背景色在视窗中画一个椭圆:
void CsampleView:: OnDraw (CDC* pDC)
{
//Determine size of view.
CRect rcView
GetClientRect (rcView) //Use background color for tooltips brush.
CBrush * pOrgBrush=pDC->SelectObject ( CBrush ::FromHandle( ::GetSysColorBrush (COLOR_INFOBK))) //Draw the ellipse.
pDC->Ellipse (rcView) //Restore original brush.
pDC->SelectObject (pOrgBrush)
} (52) 如何获取GDI对象的属性信息
可以调用GDIObject:: GetObject。这个函数将指定图表设备的消息写入到缓冲区。下例创建了......

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

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

摘要:(76) 我在我的程序中是了CDWordArray。我向它添加了约10,000个整数,这使得它变得非常非常慢。为什么会这么糟?
CDWordArray 是 很 好 用 的,只 是 因 为 你 没 有 指 定 数 组 的最大尺寸。因 此,当 你 添 加 新 元 素 时,该 类 会 从 堆 中 重 新 分 配 空 间。不 幸 的 是,该 类 会 在 每 次 插 入 新 元 素 时 都 为 数 组 重 新 分 配 空 间。如 果 你 向 它 添 加 了 很 多 新 元 素,所 有 这 些 分 配 和 复 制 数 组 的 操 作 会 就 会 使 它 变 慢。解 决 该 问 题 的 方 法 是,你 可 以 使 用 SetSize 函 数 的 第 二 个 参 数 来 改 变 这 种 重 新 分 配 的 频 率。例 如,如 果 你 把 该 参 数 设 置 为 500,则 每 次 数 组 空 间 超 出 时 它 才 重 新 分 配 并 添 加 500 个 新 空 间,而 不 是 1 个。这 样 一 来,你 就 可 以 不 用 重 新 分 配 而 添 加 了 另 外 499 个 元 素 空 间,这 也 会 大 大 提 高 程 序 的 运 行 速 度。
(77) 我该如何改变MDI框架窗口的子窗口的大小以使在窗口以一定的大小打开?
在 视 中 的 OnInitialUpdate 函 数 中 调 用 GetParentFrame 函 数。GetParentFrame 会 返 回 一 指 向 一 保 存 有 该 视 的 框 架 窗 口 的 指 针。然 后 调 用 在 框 架 窗 口 上 调 用 MoveWindow。 (78) 在我的程序的某些部分,我可以调用 MessageBox 函数来建立一个信息对话框,例如在视类中。但是,在其它部分我却不能,如文档类中。为什么?我怎样才能在我的应用程序类中建立一个信息对话框?
MessageBox 函 数 来 自 CWnd 类,所 以 你 只 能 在 从 CWnd 继 承 的 类 ( 如 CView ) 中 调 用 它。但 是,MFC 也 提 供 了 AfxMessageBox 函 数,你 可 以 在 任 何 地 方 调 用 它。
(79) 我需要在我的程序中设置全局变量,以使文档中的所有类都能访问。我应该吧它......

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