博文

VC++下用MSComm控件实现串口通讯(2007-08-10 12:06:00)

摘要:   http://www.cndw.com/tech/program/2006051066221.asp VC++下用MSComm控件实现串口通讯 作者: 来源: 
阅读 1598 人次 , 2006-5-10 11:38:00 
首先,在对话框中创建通信控件,若Control工具栏中缺少该控件,可通过菜单Project --> Add to Project --> Components and Control插入即可,再将该控件从工具箱中拉到对话框中。此时,你只需要关心控件提供的对 Windows 通讯驱动程序的 API 函数的接口。 换句话说,只需要设置和监视MSComm控件的属性和事件。 打开所需串口后,需要考虑串口通信的时机。在接收或发送数据过程中,可能需要监视并响应一些事件和错误,所以事件驱动是处理串行端口交互作用的一种非常有效的方法。使用 OnComm 事件和 CommEvent 属性捕捉并检查通讯事件和错误的值。发生通讯事件或错误时,将触发 OnComm 事件,CommEvent 属性的值将被改变,应用程序检查 CommEvent 属性值并作出相应的反应 // 若是在SDI中使用该控件则要调用下两句,在对话框程序中该语句有MFC自己创建
// 所以不用人为添加
DWORD style=WS_VISIBLE;
m_MSComm.Create(NULL,style,CRect(0,0,0,0),this,IDC_MSCOMM1);
// 串口控件的初始化
DWORD style=WS_VISIBLE;
m_MSComm.Create(NULL,style,CRect(0,0,0,0),this,IDC_MSCOMM1);
if(m_MSComm.GetPortOpen()) //如果串口是打开的,则行关闭串口
{
 m_MSComm.SetPortOpen(FALSE);
}
m_MSComm.SetCommPort(1); //选择COM1
m_MSComm.SetInBuffe......

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

CListCtrl 使用技巧(2007-08-09 15:46:00)

摘要:作者:lixiaosan
时间:04/06/2006
以下未经说明,listctrl默认view 风格为report 相关类及处理函数
MFC:CListCtrl类 SDK:以 “ListView_”开头的一些宏。如 ListView_InsertColumn
1. CListCtrl 风格       LVS_ICON: 为每个item显示大图标
      LVS_SMALLICON: 为每个item显示小图标
      LVS_LIST: 显示一列带有小图标的item
      LVS_REPORT: 显示item详细资料       直观的理解:windows资源管理器,“查看”标签下的“大图标,小图标,列表,详细资料”
2. 设置listctrl 风格及扩展风格       LONG lStyle;
      lStyle = GetWindowLong(m_list.m_hWnd, GWL_STYLE);//获取当前窗口style
      lStyle &= ~LVS_TYPEMASK; //清除显示方式位
      lStyle |= LVS_REPORT; //设置style
      SetWindowLong(m_list.m_hWnd, GWL_STYLE, lStyle);//设置style
 
      DWORD dwStyle = m_list.GetExtendedStyle();
    ......

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

VC中的一些常用方法(20条)(2007-08-08 13:57:00)

摘要:一、打开CD-ROM 
mciSendString("Set cdAudio door open wait",NULL,0,NULL); 
二、关闭CD_ROM 
mciSendString("Set cdAudio door closed wait",NULL,0,NULL); 
三、关闭计算机 
OSVERSIONINFO OsVersionInfo; //包含操作系统版本信息的数据结构 
OsVersionInfo.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); 
GetVersionEx(&OsVersionInfo); //获取操作系统版本信息 
if(OsVersionInfo.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS) 

//Windows98,调用ExitWindowsEx()函数重新启动计算机 

DWORD dwReserved; 
ExitWindowsEx(EWX_REBOOT,dwReserved); //可以改变第一个参数,实现注销用户、 
//关机、关闭电源等操作 
// 退出前的一些处理程序 

四、重启计算机 
typedef int (CALLBACK *SHUTDOWNDLG)(int); //显示关机对话框函数的指针 
HINSTANCE hInst = LoadLibrary("shell32.dll"); //装入shell32.dll 
SHUTDOWNDLG ShutDownDialog; //指向shell32.dll库中显示关机对话框......

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

MFC 教程 作者:李久进(2007-08-08 13:54:00)

摘要: MFC 教程 作者:李久进
作者序
-----------
我曾写一本关于MFC的书,分析了MFC的结构和设计(《MFC深入浅出》),华中理工大学出版。书的内容建立在对MSDN和MFC SOURCE CODE的大量分析上,该书对于希望学习MFC的人来说,是较有价值的。可惜出版社好象只在几个城市针对学生作销售,虽然学生反应不错,但是外界知道不多。 名称 1_MFC概述 2_MFC和Win32 3_CObject类 4_消息映射的实现 5_MFC对象的创建 6_应用程序的退出 7_MFC的DLL 8_MFC的进程和线程 9_MFC的状态 10_内存分配方式和调试机制 11_MFC下的文件类 12_对话框和对话框类CDialog 13_MFC工具条和状态栏 14_SOCKET类的设计和实现     http://www.czvc.com/tech/MFCJC/mfc1.htm......

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

vc++消息映射学习笔记(1)消息种类 (2007-08-08 13:45:00)

摘要: vc++消息映射学习笔记(1)消息种类

(2005-04-05 16:32) 接口原理好难懂哦 ,只看到老师嘴动动的,哎,算了,看看VC吧,这个还算比较可爱点的呢:)。
 从学VC开始就我就一直看到消息这个词,谈到WINDOWS核心机制的时候也老是这么说,我对它的理解肤浅到知道点个按钮算一个消息,汗~。买这本盗版书花30两银子呢,血不能白流,我拼了这条了老命了。。。。
  在WINDOWS中应用程序有三种消息:窗口消息,命令消息,控件消息。靠,搞这么复杂$@FUCK@##.
 1。窗口消息一般与窗口内部运作有关,如创建窗口,绘制窗口,销毁窗口,通常,消息是从系统发到窗口,或从窗口发到系统。发送函数SendMessage()或者PostMessage()。包涵的三个变量解释如下:
 Message-------------WM_XXX
 wParam---------------定义的命令
 lParam----------------定义的命令
WM_XXX可以是许多窗口消息之一,如下列消息:
 WM_CREAT:告诉窗口初始化自己。
 WM_PAINT: 告诉窗口绘制自己。
 WM_MOUSEMOVE:告诉窗口鼠标移经它。
 当然还有好多,看MSDN吧~~~~

2 。命令消息
  命令消息通常与处理用户请求有关,当用户单击一个菜单或工具栏时,命令消息就产生了。并发送到能处理该消息的类或函数(如装载文本,保存选项等)。
  当用SendMessage(),PostMessage()发送命令消息时,变量Message,wParam,lParam的格式如下:
  Message--------------WM_COMMAND
  wParam----------------0或CommandID
  IParam-----------------0

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

第四部分:消息映射 (2007-08-08 13:40:00)

摘要:http://www.vcfan.com/vc/article/article_other/20040913165014.htm   第四部分:消息映射  


  应用程序放在窗口中的任何用户界面对象都具有两种可控制的特性:1) 它的外观,2) 它响应事件的行为。在上一讲中,你已经学习了CStatic控制和如何使用样式属性来定制用户界面对象的外观。这些概念可用于MFC中的所有不同控制类。
  在本讲中,我们将介绍CButton控制,以理解消息映射和简单的事件处理。然后还要介绍使用CScrollBar控制的稍微复杂点的例子。
  理解消息映射
  在第二讲中,MFC程序不包括主要函数或时间循环。所有的事件处理都是作为CWinApp的一部分在后台处理的。因为它们是隐藏的,所以我们需要一种方法来告诉不可见的时间循环通告我们应用程序所感兴趣的事件。这需要一种叫做消息映射的机制。消息映射识别感兴趣的事件然后调用函数来响应这些事件。 
  例如,如果你要编写一个程序,当用户按下标有“退出”的按钮时要退出应用程序。在程序中,你编写代码来建立按钮:你指示按钮应如何动作。然后,为其父窗口建立用户单击按钮时的消息映射,它试图要传递消息给其父窗口。为了建立父窗口的消息,你要建立截取消息映射的机制,并且使用按钮的消息。当一指定的按钮事件发生时,消息映射会请求MFC调用一指定的函数。在这种情况下,单击退出按钮就是所感兴趣的事件。然后你把退出应用程序的代码放到指定的函数中。
  其它的工作就由MFC来做了。当程序执行时,用户单击“退出”按钮时,按钮就会自己加亮。然后MFC自动调用相应的函数,并且程序会终止。只使用很少的几行代码你就响应了用户事件。
  CButton类
  在上一讲中所讨论的CStatic控制是唯一不响应用户时间的控制。Windows中所有的其它控制都可响应用户事件。第一,当用户处理它们时,它们会自动更新其外观(例如,当用户单击按钮时,按钮会自己加亮以给用户一个反馈)。第二,每个不同的控制都要发送信息给你的代码以使程序能响应用户的需要。例如,当单击按钮时,按钮就会发送一个命令消息。如果你编写代码接收消息,则你的代......

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

6.6 自定义消息(2007-08-07 14:08:00)

摘要:http://book.csdn.net/bookfiles/100/1001002870.shtml   6.6 自定义消息  http://book.csdn.net/ 2006-8-24 15:10:00 图书导读 当前章节:6.6 自定义消息 ·6.3 消息处理 ·6.4 归纳整理 ·6.5 重定向消息 ·6.7 小结 ·21.1 实现目标与数据库设计 ·21.2 工程创建 用户可以为了特定的目的而定义自己的消息,这些消息也称为自定义消息。进行自定义消息的方法很简单,一般有两种:一种是利用ON_MESSAGE宏,另外一种就是创建自己的消息映射宏,这一种方法可以定制消息的参数类型,而不像前者只能使用固定的消息参数类型。但是一般情况下不需要定制消息的参数类型,因此这里对此不予介绍。本节主要介绍第一种比较常用的方法。 预定义常量值WM_USER(0x0400)是系统专门用来为实现处理用户自定义的消息而提供的接口,需要自定义消息时,只需要以如下形式定义即可:   WM_USER+X   其中X是一个非负整数值。另外,需要注意的是,用户自定义消息的值范围是有规定的,如6.1.3小节所述,其值介于WM_USER和0x7FFF之间,所以,为X取值时应该注意这个问题。下面结合具体的实例来详细介绍自定义消息的实现方法。 1.自定义消息WM_CUSTOMIZE 首先,在CCDlg类的头文件中加入如下代码:   #define WM_CUSTOMIZE  WM_USER+1   其中WM_CUSTOMIZE即是所要定义的消息。然后,仍在头文件中加入Customize的声明:       // Generated message map functions     //{{AFX_MSG(CCDlg)     afx_msg void OnCmd();     //}}AFX_MSG     afx_msg void Customize(WPARAM wPara......

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

VC中Combo Box控件使用大全(2007-08-06 18:01:00)

摘要:http://www.dayjs.com/html/C/kjcz/20070726/7623.html   一、如何添加/删除Combo Box内容
1,在Combo Box控件属性的Data标签里面添加,一行表示Combo Box下拉列表中的一行。换行用ctrl+回车。
2,在程序初始化时动态添加
如: //控件内容初始化
 CString strTemp;
 ((CComboBox*)GetDlgItem(IDC_COMBO_CF))->ResetContent();//消除现有所有内容
 for(int i=1;i<=100;i++)
 {
  strTemp.Format("%d",i);
  ((CComboBox*)GetDlgItem(IDC_COMBO_CF))->AddString(strTemp);
 }
3,下拉的时候添加
如: CString strTemp;
 int iCount=((CComboBox*)GetDlgItem(IDC_COMBO_CF))->GetCount();//取得目前已经有的行数
 if(iCount<1)//防止重复多次添加
 {
  ((CComboBox*)GetDlgItem(IDC_COMBO_CF))->ResetContent();
  for(int i=1;i<=100;i++)
  {
   strTemp.Format("%d",i);
   ((CComboBox*)GetDlgItem(IDC_COMBO_CF))->AddString(strTemp);
  }
 }
4,删除
DeleteString( UINT nIndex )//删除指定行,
5,插入
InsertString( ......

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

VC++ Combo Box/Combo Box Ex控件(2007-08-06 17:26:00)

摘要:http://www.d9soft.com/article/259/Article6985_1.htm     组合窗口是由一个输入框和一个列表框组成。创建一个组合窗口可以使用成员函数:
BOOL CListBox::Create( LPCTSTR lpszText, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID = 0xffff );
其中dwStyle将指明该窗口的风格,除了子窗口常用的风格WS_CHILD,WS_VISIBLE外,你可以针对列表控件指明专门的风格。
CBS_DROPDOWN 下拉式组合框
CBS_DROPDOWNLIST 下拉式组合框,但是输入框内不能进行输入
CBS_SIMPLE 输入框和列表框同时被显示
LBS_SORT 所有的行按照字母顺序进行排序

由于组合框内包含了列表框,所以列表框的功能都能够使用,如可以利用:
int AddString( LPCTSTR lpszItem )添加行,
int DeleteString( UINT nIndex )删除指定行,
int InsertString( int nIndex, LPCTSTR lpszItem )将行插入到指定位置。
void ResetContent( )可以删除列表框中所有行。
通过调用int GetCount( )得到当前列表框中行的数量。

如果需要得到/设置当前被选中的行的位置,可以调用int GetCurSel( )/int SetCurSel(int iIndex)。通过调用int GetLBText( int nIndex, LPTSTR lpszText )得到列表框内指定行的字符串。

此外通过调用int FindString( int nStartAfter, LPCTSTR lpszItem )可以在当前所有行中查找指定的字符传的位置,nStartAfter指明从那一行开始进行查找。
int SelectString( int nStartAfter, LPCTSTR lpszItem )可以选中包含指定字符......

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

VC++ List Ctrl控件(2007-08-06 17:25:00)

摘要:列表控件可以看作是功能增强的ListBox,它提供了四种风格,而且可以同时显示一列的多中属性值。MFC中使用CListCtrl类来封装列表控件的各种操作。通过调用BOOL Create( DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID );创建一个窗口,dwStyle中可以使用以下一些列表控件的专用风格:
LVS_ICON LVS_SMALLICON LVS_LIST LVS_REPORT 这四种风格决定控件的外观,同时只可以选择其中一种,分别对应:大图标显示,小图标显示,列表显示,详细报表显示
LVS_EDITLABELS 结点的显示字符可以被编辑,对于报表风格来讲可编辑的只为第一列。
LVS_SHOWSELALWAYS 在失去焦点时也显示当前选中的结点
LVS_SINGLESEL 同时只能选中列表中一项
首先你需要设置列表控件所使用的ImageList,如果你使用大图标显示风格,你就需要以如下形式调用:

CImageList* SetImageList( CImageList* pImageList, LVSIL_NORMAL);
如果使用其它三种风格显示而不想显示图标你可以不进行任何设置,否则需要以如下形式调用:
CImageList* SetImageList( CImageList* pImageList, LVSIL_SMALL);

通过调用int InsertItem( int nItem, LPCTSTR lpszItem );可以在列表控件中nItem指明位置插入一项,lpszItem为显示字符。除LVS_REPORT风格外其他三种风格都只需要直接调用InsertItem就可以了,但如果使用报表风格就必须先设置列表控件中的列信息。

通过调用int InsertColumn( int nCol, LPCTSTR lpszColumnHeading, int nFormat , int nWidth, int nSubItem);可以插入列。iCol为列的位置,从零开始,lpszColumnHeading为显示的列名,nFormat为显示对齐方式,nWidth为显示宽度,......

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