当前位置:文档之家› VC界面编程入门

VC界面编程入门

m_ToolBar.GetToolBarCtrl().HideButton(ID_BUTTON _TEST,bShow);
//bShow=FALSE, 隐藏按钮;bShow=TRUE,显示按钮
4. 串口通信
❖ 串口通信在嵌入式系统的界面编程中占有着 重要的地位。在WIN32中所有的设备都被看 成是文件,串行口也不例外。
框架类,搜寻和销售用户命令。
❖ CDocument
文档类,装载、维护文档。
❖ CView
视图类,视图显示。
选择建立基于对话框的应用程序
基于文档的 应用程序不 适合界面使 用。因为界 面一般不需 要文档背景。 仅有CxxApp 和CxxDlg两 个类。
下一步选项
关于DLL的选项
❖ SharedDLL
初始化ImageList
//创建真彩图集,ILC_COLOR32:32位色 m_ImageList.Create(32,32,ILC_COLOR32,6,4); //载入图标 m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_ICON1));
…… m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_ICON6)); //设置为工具条图集 m_ToolBar.GetToolBarCtrl().SetImageList(&m_ImageList
6. 表格
❖ 表格是界面常用的控件之一,以文本框结合可以实 现表格的编辑功能。
❖ 在对话框添加表格控件MSFlexGrid,设置控件ID后 右击控件,在属性框设置字体。
❖ 添加CMSFlexGrid类,设置表格对应的成员变量名 称。
❖ 文本框不必在对话框上预置控件,可定义指针后在 对话框初始化函数直接生成。
❖ 显示工具条
RepositionBars(AFX_IDW_CONTROLBAR_FIRST,AFX_IDW _CONTROLBAR_LAST,0);
载入不同的工具条
❖ 由多个对话框构成的界面中,工具条按钮在 每个对话框都是可见的。因为每个对话框都 可能载入这个工具条。
❖ 同一个对话框可能需要在不同的条件下分别 载入不同的工具条。
小巧的exe文件。
❖ Statically linked lib
exe文件较大, 可直接运行。
建立的对话框
基于MFC的程序
❖ VC已经搭建了程序的框架,无需加入任何代 码就可以直接编译运行。
❖ 和常规C语言不同,main/winmain函数已经 封装,只需要在程序中加入自己的响应函数。
1. 如何退出程序
如何替换工具条
❖ 定义
CToolBar m_ToolBar; CToolBar m_ToolBar2;
❖ 备用工具条初始化 m_ToolBar2.Create(this); m_ToolBar2.LoadToolBar(IDR_TOOLBAR_WAVE); RepositionBars(AFX_IDW_CONTROLBAR_FIRST,AFX_
初始化工具条
❖ 在对话框类的头文件定义一个工具条
CToolBar m_tool; //假定工具条ID为IDR_TOOLBAR1
❖ 在初始化函数中
m_tool.Create(this);//创建工具条 m_tool.LoadToolBar(IDR_TOOLBAR1);//载入资源 RepositionBars(AFX_IDW_CONTROLBAR_FIRST ,AFX_IDW_CONTROLBAR_LAST,0);//显示工具条
m_MsComm1.SetOutput(COleVariant(Tx));//发送数据 }
5. 控件简介
❖ 常用控件
包括静态文本、文本框、按钮、列表框
❖ 创建方式
静态创建: 在对话框模板创建控件,并设置属性 动态创建是指预先定义一个控件类的对象,再在程序中创建 控件。
❖ 常用函数
创建控件CreateWindow/CreateWindowEx 显示/隐藏控件ShowWindow(SW_SHOWSW_HIDE); 激活/禁用控件EnableWindow(true/false)
//不存在则m_hCom = INVALID_HANDLE_VALUE
CloseHandle(m_hCom);
CMSCOMM控件初始化
m_MsComm1.SetCommPort(1); m_MsComm1.SetSettings("19200,n,8,1"); m_MsComm1.SetInputMode(1); m_MsComm1.SetRThreshold(36); m_MsComm1.SetInputLen(36);//每次读36字节 m_MsComm1.SetPortOpen(true);//打开串口
UpdateData(TRUE); pWnd->nStart=m_Start;
标准控件——进度条
CProgressCtrl* Progress= (CProgressCtrl*) GetDlgItem(IDC_RX);//指针指向进度条 CenterWindow(this);//窗口居中 SetWindowText("波形数据接收窗口"); Progress->SetRange(0,100);//设置范围 Progress->SetStep(1);//设置最小递增刻度 Progress->SetPos(0);//设置初始位置
❖ 设置窗口顶部文本SetWindowText ❖ 窗口大小、风格及位置SetWindowPos ❖ 窗口图标AfxGetApp()->LoadIcon
3. 工具条
❖ Insert→Resource(或Ctrl+R) ❖ 选择toolbar ❖ 点击new按钮 ❖ 添加按钮,逐个修改按钮图案,设置按钮ID。
);
真彩工具条的实现(2)
❖ 设置工具条按钮文本
m_ToolBar.SetButtonText(0,"系统图");
❖ 设置工具条按钮大小
CSize TextButtonSize,ImageSize; ImageSize.cx=32; ImageSize.cy=32; m_ToolBar.SetSizes(TextButtonSize,ImageSize);
❖ 串口通信编程方法大概可以分成三种
a. CMSCOMM控件。简单可靠。 b. WINAPI函数。难度最高,要求要掌握很多的API 函数。 c. 网络流行的一些串口通讯控件,比如CSerial类, 自建消息映射,对初学者来说难度较大。
判断串口是否存在
HANDLE m_hCom; m_hCom = CreateFile({"COM1", GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL| FILE_FLAG_OVERLAPPED, NULL);
IDW_CONTROLBAR_LAST,0); m_ToolBar2.ShowWindow(SW_HIDE);//隐藏备用工具条
如何替换工具条(续)
❖ 替换工具条
m_ToolBar.ShowWindow(SW_HIDE); m_ToolBar2.ShowWindow(SW_SHOW);
❖ 隐藏工具条按钮
array_input.GetElement(&i, &rxData[0][i]); } DataProcess(0); //数据处理 }
串口发送
SendOrder(BYTE Byte1, BYTE Byte2, BYTE Byte3, BYTE Byte4)
{ CByteArray Tx;
Tx.SetSize(8);//输出字节数组大小 Tx.SetAt(0,0xab);//设置数组元素 …… Tx.SetAt(7,Byte4); if (bCommExist)//如果串口存在 { m_MsComm1.SetInBufferCount(0);//清空接收缓冲
❖ DestroyWindow() 在子窗口退出会报故障并退出程序。
❖ EndDialog(IDOK)/EndDialog(IDCANCEL) 内置的响应对话框的确定/取消的函数。
❖ exit(0) 故障退出函数。
2. 窗口的部分设置
❖ 在OnInitDialog函数添加工具条初始化代码。 主窗口已启用此函数,子窗口需要类模板 (ctrl+w或View →ClassWizard →CxxDlg的消 息里面选择WM_INITDIALOG,再添加函数)
edit=new CEdit; edit->Create(WS_CHILD,CRect(0,0,0,0),&m_FlexGrid,IDC_EDIT); //edit 为头文件定义的文本框指针,必须作为表格的子窗口生成
表格初始化
CMSFlexGrid *para;//指向表格的指针 para=(CMSFlexGrid*)GetDlgItem(IDC_SETTING_ PARA);//根据ID获得表格地址,强制转为表格指针 para->ShowWindow(SW_SHOW);//显示表格 para->SetCols(4);//设置表格列数 para->SetRows(3);//设置表格行数 para->SetTextArray(0,“PID参数”);//设置表格内容 …… para->MoveWindow(70,100,407,97);//表格大小、 位置
常规工具条的缺陷
❖ 使用VC自带的资源模板建立的常规工具条只 支持16色(如Word的工具条),即使载入了 真彩图标也会转为16色显示。
真彩工具条的使用
相关主题