前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >MFC/C++学习系列之简单记录5——控件位置设置

MFC/C++学习系列之简单记录5——控件位置设置

原创
作者头像
升级打怪的菜鸟
发布2024-11-17 21:43:00
发布2024-11-17 21:43:00
18520
代码可运行
举报
文章被收录于专栏:MFCMFC
运行总次数:0
代码可运行

好事发生

文章推荐:从零开始学习c++全套通关系列(第一章)万字总结,建议收藏~

文章链接:https://cloud.tencent.com/developer/article/2466170

文章简介:本文详细介绍了C++通关系列的第一章内容,都还比较基础,推荐基础薄弱的同学来看。


前言

需求提及不够清楚,没有详细的文档输入,甚至协议都是看代码,然后查文件才确认协议更改。这样对新来的开发人员很不友好。

工作这段时间真正体会到文档的重要性,哪怕是简单文件说明都好过几天看代码摸索!


控件位置设置

基于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来进行定义。而且前端界面的代码可以直接复制使用,省去了很多编辑的时间。

代码语言:csharp
复制
<TabControl x:Name="tabControl" HorizontalAlignment="Left" Height="250" Margin="175,100,0,0" VerticalAlignment="Top" Width="485">
            <TabItem Header="TabItem">
                <Grid Background="#FFE5E5E5"/>
            </TabItem>
            <TabItem Header="TabItem">
                <Grid Background="#FFE5E5E5">
                    <DataGrid x:Name="Datalist_Grid" ItemsSource="{Binding DataList}" 
                        ScrollViewer.VerticalScrollBarVisibility="Hidden" 
                        AutoGenerateColumns="False"
                        CanUserAddRows="False"
                        CanUserResizeColumns="False"
                          Margin="0,0,28,0"
                          >
                        <DataGrid.Columns>
                            <DataGridTextColumn Header="名称" Width="*" Binding="{Binding Name}"/>
                            <DataGridTextColumn Header="衣服类型" Width="*" Binding="{Binding ClothTpye}"/>
                            <DataGridTextColumn Header="颜色" Width="*" Binding="{Binding ClothColor}"/>
                            <DataGridTextColumn Header="尺码" Width="*" Binding="{Binding ClothSize}"/>
                            <DataGridTextColumn Header="价格" Width="*" Binding="{Binding ClothPrice}"/>

                            <DataGridTemplateColumn Header="操作" Width="50">
                                <DataGridTemplateColumn.CellTemplate>
                                    <DataTemplate>
                                        <StackPanel Orientation="Horizontal">
                                            <TextBlock><Hyperlink Command="{Binding DeleterData}" CommandParameter="{Binding}"><Run Text="操作"/></Hyperlink></TextBlock>
                                        </StackPanel>
                                    </DataTemplate>
                                </DataGridTemplateColumn.CellTemplate>
                            </DataGridTemplateColumn>
                        </DataGrid.Columns>
                    </DataGrid>
                </Grid>
            </TabItem>
        </TabControl>

C++ MFC中Tab位置设定的相关使用

代码语言:c
代码运行次数:0
复制
CWnd* pTabWnd = pTabWnd=GetDlgItem(IDC_TAB1);
	if (pTabWnd != NULL)
	{
		// 获取Tab页的矩形区域
		CRect rect;
		pTabWnd->GetClientRect(&rect);
		pTabWnd->MoveWindow(rect);
		CRect btnrect(rect.left+50, rect.top+80, rect.left+100, rect.top + 100);
		// 设置按钮的位置和大小
		m_Btn1.MoveWindow(&btnrect, TRUE); // 将按钮移动到Tab页的矩形区域内
	}

这里是获取控件的位置,然后将获取的控件位置通过RECT的形式进行记录,记录好了之后需要在通过使用MoveWindow函数,你可以设置控件的位置和大小。CRect对象可以直接传递给MoveWindow函数。

而这里还仅是将按钮的位置写入了Tab中,每个Tab项中都存在按钮控件,而C#放入哪个Tab子控件就只存在该控件中,不会在其他界面显示,如果在其他界面中需要显示,只要复制一下就过去了。

神奇的来了,在MFC中如果想要达到C#界面中的效果,需要写代码实现。没错!你需要告诉电脑,这个控件在第一界面显示后,第二个界面就不能显示了哦!增加了开发人员的代码量!

代码语言:c
代码运行次数:0
复制
void CMFCtest1Dlg::OnTcnSelchangeTab1(NMHDR* pNMHDR, LRESULT* pResult)
{
	// TODO: 在此添加控件通知处理程序代码
	*pResult = 0;
	LPNMLISTVIEW pNMListView = reinterpret_cast<LPNMLISTVIEW>(pNMHDR);

	// 根据选中的Tab页面,显示或隐藏按钮
	if (pNMListView->iItem == 0) // 如果选中的是第一个Tab页面
	{
		m_Btn1.ShowWindow(SW_SHOW); // 显示按钮
	}
	else
	{
		m_Btn1.ShowWindow(SW_HIDE); // 隐藏按钮
	}
}

总结

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

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 好事发生
  • 前言
  • 控件位置设置
    • 实际说明
      • C# Tab位置设定的相关使用
      • C++ MFC中Tab位置设定的相关使用
  • 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档