MFC/C++学习系列之简朴记载5

打印 上一主题 下一主题

主题 827|帖子 827|积分 2483


前言

需求提及不够清楚,没有详细的文档输入,甚至协议都是看代码,然后查文件才确认协议更改。这样对新来的开辟职员很不友爱。
工作这段时间真正体会到文档的紧张性,哪怕是简朴文件阐明都好过几天看代码摸索!

控件位置设置

基于VC 6.0的MFC架构开辟,但是最近需求不明确,以为界面要修改,研究了一下界面计划。
意图:在界面中设置Tab界面,Tab中插入很多MSFlexGrid表格。
问题来了,插入Tab很简朴,拖动Tab就可以放置在界面上,而MSFlexGrid却始终无法在Tab中显示,要不就是整个覆盖掉Tab,要不就是不合适,也无法切换。
最后研究了别的源码计划才发现问题,原来VC 6.0中的Tab中要插入控件必要手动设置控件位置,假装控件在界面中出现。
这和VS C#的界面很不一样,在C#中的Tab增加控件,只必要使用“ Tab"按键,就可以把必要添加的控件拖动至Tab中,而且由于每个子Tab页面不同并不必要在显示一个Tab的控件时来隐蔽另一个Tab界面的控件。
实际阐明

C# Tab位置设定的相干使用


在VS 2019中直接在工具箱中找到TabControl控件,然后可以直接拖动DataGrid进入TabControl,不必要额外的设置。如果必要表格和TabControl的大小同等,也只必要鼠标拖动大概通过Margin来进行界说。而且前端界面的代码可以直接复制使用,省去了很多编辑的时间。
  1. <TabControl x:Name="tabControl" HorizontalAlignment="Left" Height="250" Margin="175,100,0,0" VerticalAlignment="Top" Width="485">
  2.             <TabItem Header="TabItem">
  3.                 <Grid Background="#FFE5E5E5"/>
  4.             </TabItem>
  5.             <TabItem Header="TabItem">
  6.                 <Grid Background="#FFE5E5E5">
  7.                     <DataGrid x:Name="Datalist_Grid" ItemsSource="{Binding DataList}"
  8.                         ScrollViewer.VerticalScrollBarVisibility="Hidden"
  9.                         AutoGenerateColumns="False"
  10.                         CanUserAddRows="False"
  11.                         CanUserResizeColumns="False"
  12.                           Margin="0,0,28,0"
  13.                           >
  14.                         <DataGrid.Columns>
  15.                             <DataGridTextColumn Header="名称" Width="*" Binding="{Binding Name}"/>
  16.                             <DataGridTextColumn Header="衣服类型" Width="*" Binding="{Binding ClothTpye}"/>
  17.                             <DataGridTextColumn Header="颜色" Width="*" Binding="{Binding ClothColor}"/>
  18.                             <DataGridTextColumn Header="尺码" Width="*" Binding="{Binding ClothSize}"/>
  19.                             <DataGridTextColumn Header="价格" Width="*" Binding="{Binding ClothPrice}"/>
  20.                             <DataGridTemplateColumn Header="操作" Width="50">
  21.                                 <DataGridTemplateColumn.CellTemplate>
  22.                                     <DataTemplate>
  23.                                         <StackPanel Orientation="Horizontal">
  24.                                             <TextBlock><Hyperlink Command="{Binding DeleterData}" CommandParameter="{Binding}"><Run Text="操作"/></Hyperlink></TextBlock>
  25.                                         </StackPanel>
  26.                                     </DataTemplate>
  27.                                 </DataGridTemplateColumn.CellTemplate>
  28.                             </DataGridTemplateColumn>
  29.                         </DataGrid.Columns>
  30.                     </DataGrid>
  31.                 </Grid>
  32.             </TabItem>
  33.         </TabControl>
复制代码
C++ MFC中Tab位置设定的相干使用



  1. CWnd* pTabWnd = pTabWnd=GetDlgItem(IDC_TAB1);
  2.         if (pTabWnd != NULL)
  3.         {
  4.                 // 获取Tab页的矩形区域
  5.                 CRect rect;
  6.                 pTabWnd->GetClientRect(&rect);
  7.                 pTabWnd->MoveWindow(rect);
  8.                 CRect btnrect(rect.left+50, rect.top+80, rect.left+100, rect.top + 100);
  9.                 // 设置按钮的位置和大小
  10.                 m_Btn1.MoveWindow(&btnrect, TRUE); // 将按钮移动到Tab页的矩形区域内
  11.         }
复制代码
这里是获取控件的位置,然后将获取的控件位置通过RECT的情势进行记载,记载好了之后必要在通过使用MoveWindow函数,你可以设置控件的位置和大小。CRect对象可以直接通报给MoveWindow函数。
而这里还仅是将按钮的位置写入了Tab中,每个Tab项中都存在按钮控件,而C#放入哪个Tab子控件就只存在该控件中,不会在其他界面显示,如果在其他界面中必要显示,只要复制一下就过去了。
神奇的来了,在MFC中如果想要达到C#界面中的效果,必要写代码实现。没错!你必要告诉电脑,这个控件在第一界面显示后,第二个界面就不能显示了哦!增加了开辟职员的代码量!
  1. void CMFCtest1Dlg::OnTcnSelchangeTab1(NMHDR* pNMHDR, LRESULT* pResult)
  2. {
  3.         // TODO: 在此添加控件通知处理程序代码
  4.         *pResult = 0;
  5.         LPNMLISTVIEW pNMListView = reinterpret_cast<LPNMLISTVIEW>(pNMHDR);
  6.         // 根据选中的Tab页面,显示或隐藏按钮
  7.         if (pNMListView->iItem == 0) // 如果选中的是第一个Tab页面
  8.         {
  9.                 m_Btn1.ShowWindow(SW_SHOW); // 显示按钮
  10.         }
  11.         else
  12.         {
  13.                 m_Btn1.ShowWindow(SW_HIDE); // 隐藏按钮
  14.         }
  15. }
复制代码

总结

本日重要写了一下Tab控件中设置其他控件的方式,之前只是听说MFC很老,最近使用发现开辟不够C#便捷,不知道是不是自己没有把握到方法,继续基类吧!

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

南七星之家

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表