您的位置:首页 > 其它

基于对话框配置工具框架简单分析(二)

2018-02-08 20:58 465 查看

对话框类头文件基本结构(Integrity Mobile ConfiguratorDlg.h)

// (1)#pragma once + 各种包含(afxwin.h + 后续的各种类的头文件);

//(2)XXXXDlg类定义(关联的对话框ID + HICON m_hIcon +构造+ DoDataExchange +声明消息映射函数(OnInitDialog+OnSysCommand+OnPaint+OnQueryDragIcon)+ 声明消息映射表);

对话框类的定义中主要内容:类中各种函数的声明(包括消息映射函数),各种变量的声明,还有各种类的对象(包括Tab控件类,菜单栏类,工具栏类,组合框类)

对话框类实现文件的基本结构,并对部分代码分析(Integrity Mobile ConfiguratorDlg.cpp)

// (1)各种包含头文件(stdafx.h + afxdialogex.h + XXXX.h + XXXXDlg.h) + 活动预处理;

// (2)CAboutDlg类的定义(关联的对话框ID + 构造 + DoDataExchange + 声明消息映射表)+实现(构造 + DoDataExchange + 消息映射表BEGIN~END);

// (3)XXXXDlg类的实现(构造 + DoDataExchange + 消息映射表BEGIN~END);

// (4)CTestDlg消息处理程序:(消息处理程序对应消息映射表中的消息)OnInitDialog + OnSysCommand + OnPaint + OnQueryDragIcon。

初始化程序中主要是:设置对话框图标,设置菜单栏,设置工具栏,在工具栏的某个按钮上设置组合框(显示串口号),设置Tab控件等等.

BOOL CIntegrityMobileConfiguratorDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// 将“关于...”菜单项添加到系统菜单中。
// IDM_ABOUTBOX 必须在系统命令范围内。
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000);

CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != NULL)
{
BOOL bNameValid;
CString strAboutMenu;
bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX);
ASSERT(bNameValid);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
}
// 设置此对话框的图标。  当应用程序主窗口不是对话框时,框架将自动
//  执行此操作
SetIcon(m_hIcon, TRUE);         // 设置大图标
SetIcon(m_hIcon, FALSE);        // 设置小图标

// TODO: 在此添加额外的初始化代码
m_pcfgProcess = new CfgProcess((DWORD)this,CallBackDisplay);
menu.LoadMenu(IDR_MENU);  //IDR_MENU为菜单栏ID号
SetMenu(&menu);
//定时器 (这里的定时器名称代表定时从串口接收数据)
SetTimer(COM_RECV_PROC_TIMER,150,NULL);
//这里的三个参数意思(定时器名称,定时时间(周期性触发),填NULL调用系统回调函数)
//最后一个参数为NULL,使用系统默认的回调函数,系统默认的是OnTimer函数。
m_bSerialConnected = FALSE;
m_bFirstAck = FALSE;
m_bConnInd = FALSE;
m_wBackupStatus = BACKUP_NONE;

//添加一个平面工具栏
if (!m_wndtoolbar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_ALIGN_TOP | CBRS_GRIPPER | CBRS_TOOLTIPS, CRect(0, 3, 0, 0)) || !m_wndtoolbar.LoadToolBar(IDR_TOOLBAR))
{
TRACE0("failed to create toolbar\n");
return FALSE;
}
// Create the zoom combo box in the toolbar.
//在按钮上创建组合框,按钮位置决定了组合框的位置
int index1 = m_wndtoolbar.CommandToIndex(IDC_COMBO_COM_PORT);   //获取要设置为组合框的按钮的位置
m_wndtoolbar.SetButtonInfo(index1, IDC_COMBO_COM_PORT, TBBS_SEPARATOR, 100);//(对空白按钮进行设置)设置组合框的ID,类型(这里是分隔栏),100是指分隔栏宽度
// 根据分隔符的尺寸rect建立组合框
CRect rect1;
m_wndtoolbar.GetItemRect(index1, &rect1);    //将组合框的矩形区域数据存入rect1中
rect1.bottom += 100;
m_cZoomCombo.Create(WS_CHILD | WS_VISIBLE | WS_VSCROLL | CBS_DROPDOWNLIST, rect1,&m_wndtoolbar, IDC_COMBO_COM_PORT); //创建组合框  四个参数(样式,位置和大小,父窗口,组合控件ID)

//选中第1条记录
m_cZoomCombo.SetCurSel(0);
m_wndtoolbar.ShowWindow(SW_SHOW);
RepositionBars(AFX_IDW_CONTROLBAR_FIRST, AFX_IDW_CONTROLBAR_LAST, 0);

//使工具栏图标显示256色
HBITMAP hbm = (HBITMAP)::LoadImage(AfxGetInstanceHandle(),
MAKEINTRESOURCE(IDR_TOOLBAR), //加载IDB_TOOLBAR
IMAGE_BITMAP, //按位图格式
0, 0, // cx,cy
LR_CREATEDIBSECTION | LR_LOADMAP3DCOLORS);
CBitmap bm;
bm.Attach(hbm);
m_ilToolBar.Create(24, 24, ILC_COLOR8, 6, 6);
m_ilToolBar.SetBkColor(::GetSysColor(COLOR_BTNFACE)); //将系统色设置为当前背景色
m_ilToolBar.Add(AfxGetApp()->LoadIcon(IDI_ICON_CONNECT)); //按顺序加载图标
m_ilToolBar.Add(AfxGetApp()->LoadIcon(IDI_ICON_READ));
m_ilToolBar.Add(AfxGetApp()->LoadIcon(IDI_ICON_CLEAR));
m_ilToolBar.Add(AfxGetApp()->LoadIcon(IDI_ICON_WRITE));
m_ilToolBar.Add(AfxGetApp()->LoadIcon(IDI_ICON_DISCONNECT));
m_wndtoolbar.GetToolBarCtrl().SetImageList(&m_ilToolBar);

//创建页面窗口,以及页面名称
m_tab.InsertItem(0, _T("Device Address"));
m_tab.InsertItem(1, _T("Setting"));
//设置父窗口
page1.Create(IDD_PAGE1, GetDlgItem(IDC_TAB));
page2.Create(IDD_PAGE2, GetDlgItem(IDC_TAB));
//定义窗口大小
CRect rect;
m_tab.GetClientRect(&rect);
rect.top += 20;
rect.bottom -= 5;
rect.left += 5;
rect.right -= 5;
//设置窗口位置
page1.MoveWindow(&rect);
page2.MoveWindow(&rect);
//设置程序的首页,即启动程序后首先显示的页面
page1.ShowWindow(TRUE);
m_tab.SetCurSel(0);

return TRUE;  // 除非将焦点设置到控件,否则返回 TRUE
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐