友情提示:如果本网页打开太慢或显示不完整,请尝试鼠标右键“刷新”本网页!
第三电子书 返回本书目录 加入书签 我的书架 我的书签 TXT全本下载 『收藏到我的浏览器』

C语言实例教程(PDF格式)-第67部分

快捷操作: 按键盘上方向键 ← 或 → 可快速上下翻页 按键盘上的 Enter 键可回到本书目录页 按键盘上方向键 ↑ 可回到本页顶部! 如果本书没有阅读完,想下次继续接着阅读,可使用上方 "收藏到我的浏览器" 功能 和 "加入书签" 功能!


向,因此,如果我们在程序中将映射模式更改为其它的映射模式,需 

要注意应该随y轴的正方向的不同而更改图形输出函数所使用的坐标 

值的正负。  



SetMapMode将映射模式设置为指定的映射模式,同时返回原有的映射 

模式。  



下面我们来编写一个实用工具MappingConverter,该工具在不同的逻 

辑单位之间进行转换。需要注意的是,这种转换有两种不同的方式, 

即逻辑的还是物理的。如果当前映射模式为MM_TEXT,这时一英寸所 

对应的象素值大小是一定的,我们称这种映射方式的逻辑的;如果当 

前映射模式为MM_HIENGLISH、MM_LOENGLISH等,则屏幕上的一英寸对 

应的象素值依赖于屏幕的实际分辨率,在这种模式下,800   600的屏 

                                    ' 

幕分辨率下一英寸所对应的象素值要比在640'  480的屏幕分辨率多。 

工具MappingConverter考虑到了这种差异,允许用户指定转换是基于 

逻辑英寸进行还是基于物理英寸进行。对于实际的转换过程,则通过 

调用CDC类的成员函数DPtoHIMETRIC来实现的,该成员函数将设备坐 

标值转换为相应的HIMETRIC度量。  



由于使用的方便考虑,我们还在工具MappingConverter中添加了其它 


…………………………………………………………Page 578……………………………………………………………

几种度量单位的转换,这些度量单位包括:磅 (point)、英寸 

(inch)、厘米 (centimeter)、水平对话框单位 (horizontal     dialog  

units)和垂直对话框单位 (vertical  dialog  units)。这里需要说明 

的是水平对话框单位和垂直对话框单位。这两种度量单位在对话框模 

板中用于对话框和控件的度量,此外,在编辑控件和列表框以及组合 

框控件设置制表位的函数SetTabStops也使用对话框单位。水平对话 

框单位等于当前系统字体的半角字符的平均宽度的1/4,而垂直对话 

框单位则等于当前系统字体的字符的高度的1/8。API函数 

GetDialogBaseUnits返回了当前系统所使用的对话框基本单位,由此 

可以导出当前使用的水平对话框单位和垂直对话框单位。但是要注意 

的是,实际使用的对话框单位依赖于当前对话框所使用的字体。 

CDialog类的成员函数MapDialogRect可以将一个以对话框单位表示的 

矩形转换为相应的屏幕象素单位。在工具MappingConverter,对话框 

单位是通过函数GetDialogBaseUnits的返回值计算得到的,也就是 

说,该单位是基于默认的系统字体,而不是对话框实际所选用的字体 

的。  



                                      



             图9。 13 应用程序MappingConverter的主对话框  



下面的步骤讲述了工具MappingConverter的创建。  



1。   使用AppWizard创建一个基于对话框的MFC应用应用程序,按图修 

改应用程序的主对话框。  



各主要控件的ID如表9。6所示。  



                    表9。 6 控件属性列表  



             控件        ID      属性  



             “单位”组合    IDC_BO1  Type:Drop  

             框                 List  

                               Sort:假  


…………………………………………………………Page 579……………………………………………………………

                   “值”文本编      IDC_EDIT1  

                                             

                  辑框  



                   “转换”按钮   IDOK  

                                             



                  列表控件         IDC_LIST1   View:Report  

                                           Sort:None  



                   “物理的”单      IDC_RADIO1  Group:真  

                  选钮  



                   “逻辑的”单      IDC_RADIO2  

                                             

                  选钮  



按图9。14设置各控件的Tab Order。  



                                                    



                         图9。 14 各控件的Tab Order  



在组合框IDC_BO1的属性对话框的Data选项卡内输入以下的列表 

项:  



MM_HIENGLISH (0。001英寸)  



MM_LOENGLISH (0。01英寸)  



MM_HIMETRIC (0。01毫米)  



MM_LOMETRIC (0。1毫米)  



MM_TEXT (象素)  



MM_TWIPS (缇)  



磅  



英寸  



厘米  


…………………………………………………………Page 580……………………………………………………………

水平对话框单位 (系统字体)  



垂直对话框单位 (系统字体)  



注意各列表项的排列顺序,如果顺序出错,将导致在单位转换是进行 

不正确的换算,这也是将组合框的Sort属性设置为假的缘故。  



按图9。15映射对话框的控件到类CMappingConverterDlg的成员变量。 

由于我们仅使用编辑框IDC_EDIT1来输入数值,因此我们将它映射到 

类型为float的成员变量m_fValue;同时,我们将单选钮组 

IDC_RADIO1映射为类型为int的成员变量m_nradio,当变量m_nradio 

的值为0时表示单选钮 “逻辑的”被选中,变量值为1时表示单选钮 

 “物理的”被选中。  



                                                         



                   图9。 15 映射成员变量到对话框控件  



按下面的代码修改类CMappingConverterDlg的成员函数 

OnInitDialog:  



/////////////////////////////////////////////////////////////////////////////  



// CMappingConverterDlg 消息处理函数  



BOOL CMappingConverterDlg::OnInitDialog()  



{  



// 设置默认选中的单选钮为 “逻辑的”  



m_nradio=0;  


…………………………………………………………Page 581……………………………………………………………

CDialog::OnInitDialog();  



// 在系统菜单中添加 “关于”菜单项  



// IDM_ABOUTBOX 必须在系统命令的范围内  



ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);  



ASSERT(IDM_ABOUTBOX 《 0xF000);  



CMenu* pSysMenu = GetSystemMenu(FALSE);  



if (pSysMenu != NULL)  



{  



CString strAboutMenu;  



strAboutMenu。LoadString(IDS_ABOUTBOX);  



if (!strAboutMenu。IsEmpty())  



{  



pSysMenu…》AppendMenu(MF_SEPARATOR);  



pSysMenu…》AppendMenu(MF_STRING; IDM_ABOUTBOX; strAboutMenu);  



}  



}  



// 设置对话框的图标。当应用程序的主窗口不是对话框时框架会 自动进行这个过程  



SetIcon(m_hIcon; TRUE); // Set big icon  



SetIcon(m_hIcon; FALSE); // Set small icon  



// TODO: 添加额外的初始化代码  



// 在列表控件中添加两列: “单位”和 “值”  



m_lst。InsertColumn(0; 〃单位〃; LVCFMT_LEFT; 180; 0);  



m_lst。InsertColumn(1; 〃值〃; LVCFMT_LEFT; 100; 1);  



// 初始化列表控件中的项所用的字符串数组  



char *szItemTexts''={〃MM_HIENGLISH (0。001英寸)〃;  



〃MM_LOENGLISH (0。01英寸)〃;  


…………………………………………………………Page 582……………………………………………………………

〃MM_HIMETRIC (0。01毫米)〃;  



〃MM_LOMETRIC (0。1毫米)〃;  



〃MM_TEXT (象素)〃;  



〃MM_TWIPS (缇)〃;  



〃磅〃;  



〃英寸〃;  



〃厘米〃;  



〃水平对话框单位  (系统字体)〃;  



〃垂直对话框单位  (系统字体)〃};  



// 初始化列表控件中的项  



for (int i=0; i
返回目录 上一页 下一页 回到顶部 1 1
快捷操作: 按键盘上方向键 ← 或 → 可快速上下翻页 按键盘上的 Enter 键可回到本书目录页 按键盘上方向键 ↑ 可回到本页顶部!
温馨提示: 温看小说的同时发表评论,说出自己的看法和其它小伙伴们分享也不错哦!发表书评还可以获得积分和经验奖励,认真写原创书评 被采纳为精评可以获得大量金币、积分和经验奖励哦!