首页>>百科常识

在使用MFC时,.rc文件打开后是程序而不是自己编的对话框,怎么办呐

今天宠物迷的小编给各位宠物饲养爱好者分享mfc 设置控件位置的宠物知识,其中也会对在使用MFC时,.rc文件打开后是程序而不是自己编的对话框,怎么办呐进行专业的解释,如果能碰巧解决你现在面临的宠物相关问题,别忘了关注本站哦,现在我们开始吧!

在使用MFC时,.rc文件打开后是程序而不是自己编的对话框,怎么办呐

.rc的文件,本身就是个txt的文档,里面描述了窗口的相关属性,你可以自己写这样的文件的,它每个IDC_XXXX的这样的东西都会 在resource.h的头文件中有对应,你直接把它删掉就好了。

MFC就相当于屎,之前吃的是大米、小米还是煎饼你要明白,这叫知其然,还要知其所以然。

所以,我推荐你看一下 老罗的 win32汇编语言程序设计,你可以查找到 关于rc文件如何手写,到底vc的控件内部原理到底是怎么样的? 你不一定懂汇编,但是这些知识与你学习MFC是大有益处的。。 个人见解,不足道哉。支持度娘,互相分享!

在使用MFC时,.rc文件打开后是程序而不是自己编的对话框,怎么办呐

MFC对话框大小改变时同时改变控件位置

实际用到的就是GetWindowRect和MoveWindow两个函数。
计算过程中,既然是相对底部,那么获取窗口大小和控件位置后,先计算rect.bottom和窗口高度的差值,加上一个底部正常距离,获取一个int值 iMove; 将rect的top和bottom分别减去这个iMove,调用MoveWindow即可。

mfc 窗口大小变化时如何让窗口内部控件也一起随比例改变位置

mfc 窗口大小变化时让窗口内部控件也一起随比例改变位置:
void CXTest2Dlg::OnSize(UINT nType, int cx, int cy)
{
CDialog::OnSize(nType, cx, cy);
// TODO: 在此处添加消息处理程序代码
//将窗口移动到合适位置和大小
CRect rc,rc0,rc1;
GetClientRect(&rc0);//先取得整个对话框的大小及位置
//设置Tab控件位置
rc1****=rc0****;
rc1.left=rc0.left+1;
rc1.bottom=rc0.bottom-30;
rc1.right=rc0.right-1;
if(GetDlgItem(IDC_TAB1)!=NULL)
{
GetDlgItem(IDC_TAB1)->MoveWindow(&rc1);
}

//设置时钟位置
rc1****=rc0.bottom-20;
rc1.left=rc0.left+5;
rc1.bottom=rc0.bottom;
rc1.right=rc0.left+160;
if(GetDlgItem(IDC_CLOCKTEST)!=NULL)
{
GetDlgItem(IDC_CLOCKTEST)->MoveWindow(&rc1);
}
//设置关闭按钮位置
rc1****=rc1****-5;
rc1.left=rc0.right-200;
rc1.bottom=rc1.bottom;
rc1.right=rc0.right-120;
if(GetDlgItem(IDOK)!=NULL)
{
GetDlgItem(IDOK)->MoveWindow(&rc1);
}
//设置取消按钮位置
rc1.left=rc0.right-100;
rc1.right=rc0.right-20;
if(GetDlgItem(IDCANCEL)!=NULL)
{
GetDlgItem(IDCANCEL)->MoveWindow(&rc1);
}

//将三个对话框资源定位到Tab控件中
if(GetDlgItem(IDC_TAB1)!=NULL)
{
GetDlgItem(IDC_TAB1)->GetClientRect(&rc);
rc1****=rc****+20;
rc1.left=rc.left+1;
rc1.bottom=rc.bottom-10;
rc1.right=rc.right-1;

tab1.GetClientRect(&rc1);
tab1.GetDlgItem(IDC_MSGINFO)->MoveWindow(&rc1);//移动第一个
rc1.bottom=rc.bottom-35;//第二个及第三个底部留出按钮位置
tab2.GetDlgItem(IDC_BNSLIST)->MoveWindow(&rc1);
tab3.GetDlgItem(IDC_MSGERRINFO)->MoveWindow(&rc1);

如何设置java控件的位置和大小

 Java中通过布局管理器(LayoutManager)来布局控件。
  常见的布局管理器如下:
  BorderLayout:Frame和Dialog的默认布局管理器。其把面板分为上北、下南、左西、右东和中间,5个部分,在未指定控件大小的情况下,被加入的控件将会随着内容大小自动伸缩,随着窗口的放大缩小也相应的产生伸缩。
  FlowLayout :按顺序布局控件。所有控件按照流水一样排列,若当前行放不下了,则自动排到下一行。按子控件的大小(getPreferedSize())在当前面板布局。
  GridLayout :网格布局。该布局将所有控件按从左到右,从上到下的形式把控件以网格的形式排列出来。子控件会填满整个面板。
  GridBagLayout :网格包布局。能布局复杂界面,但其使用也很复杂,一般不用。
  null布局:即将布局管理器设置为null。此时,通过调用子控件的setBounds方法进行布局。
  其他布局管理器。以上是Java内置的常用布局管理器,还有一些非官方的好用布局管理器:XYLayout(按大小和位置布局)、VerticalFlowLayout (纵向流水布局)、TableLayout(表格布局)。
  一般的Java程序布局方式:用FlowLayout布局一些按钮,用BorderLayout嵌套多个面板。

MFC对话框大小改变时同时改变控件位置

实际用到的就是GetWindowRect和MoveWindow两个函数。
计算过程中,既然是相对底部,那么获取窗口大小和控件位置后,先计算rect.bottom和窗口高度的差值,加上一个底部正常距离,获取一个int值 iMove; 将rect的top和bottom分别减去这个iMove,调用MoveWindow即可。

mfc 窗口大小变化时如何让窗口内部控件也一起随比例改变位置

mfc 窗口大小变化时让窗口内部控件也一起随比例改变位置:
void CXTest2Dlg::OnSize(UINT nType, int cx, int cy)
{
CDialog::OnSize(nType, cx, cy);
// TODO: 在此处添加消息处理程序代码
//将窗口移动到合适位置和大小
CRect rc,rc0,rc1;
GetClientRect(&rc0);//先取得整个对话框的大小及位置
//设置Tab控件位置
rc1****=rc0****;
rc1.left=rc0.left+1;
rc1.bottom=rc0.bottom-30;
rc1.right=rc0.right-1;
if(GetDlgItem(IDC_TAB1)!=NULL)
{
GetDlgItem(IDC_TAB1)->MoveWindow(&rc1);
}

//设置时钟位置
rc1****=rc0.bottom-20;
rc1.left=rc0.left+5;
rc1.bottom=rc0.bottom;
rc1.right=rc0.left+160;
if(GetDlgItem(IDC_CLOCKTEST)!=NULL)
{
GetDlgItem(IDC_CLOCKTEST)->MoveWindow(&rc1);
}
//设置关闭按钮位置
rc1****=rc1****-5;
rc1.left=rc0.right-200;
rc1.bottom=rc1.bottom;
rc1.right=rc0.right-120;
if(GetDlgItem(IDOK)!=NULL)
{
GetDlgItem(IDOK)->MoveWindow(&rc1);
}
//设置取消按钮位置
rc1.left=rc0.right-100;
rc1.right=rc0.right-20;
if(GetDlgItem(IDCANCEL)!=NULL)
{
GetDlgItem(IDCANCEL)->MoveWindow(&rc1);
}

//将三个对话框资源定位到Tab控件中
if(GetDlgItem(IDC_TAB1)!=NULL)
{
GetDlgItem(IDC_TAB1)->GetClientRect(&rc);
rc1****=rc****+20;
rc1.left=rc.left+1;
rc1.bottom=rc.bottom-10;
rc1.right=rc.right-1;

tab1.GetClientRect(&rc1);
tab1.GetDlgItem(IDC_MSGINFO)->MoveWindow(&rc1);//移动第一个
rc1.bottom=rc.bottom-35;//第二个及第三个底部留出按钮位置
tab2.GetDlgItem(IDC_BNSLIST)->MoveWindow(&rc1);
tab3.GetDlgItem(IDC_MSGERRINFO)->MoveWindow(&rc1);

MFC编程遇到问题求助大神

你在VC中加几个断点,用F5调试下,看看从哪里开始出错的。按道理,你用的SetWindowText来显示,显示方面是不应该错的,错误应该在上面的计算。你可以在调试时看看显示时sz的值,以及m_e等函数的参数有没有问题。这个问题应该比较容易找出来。

mfc中控件移动的问题

没有现成的成员函数可以完成这个功能,可以用下面迂回的办法:(假设要获得一个CButton but控件的位置)
RECT rectBut;
but.GetWindowRect( &rectBut); //获取按钮控件的屏幕坐标
RECT rectParent;
(but.GetParent())->GetWindowRect( &rectParent ); //获取按钮父窗口的屏幕坐标
RECT rect; //开始计算按钮相对于父窗口的坐标
rect.left = rectBut.left - rectParent.left;
rect.right = rectBut.right - rectParent.left;
rect**** = rectBut**** - rectParent****;
rect.bottom = rectBut.bottom - rectParent****;

经过这段代码后,rect里面就是按钮空间相对于其所在窗口的坐标。这段代码有两点要特别注意:
1)but.GetParent()可能返回NULL,这在按钮是桌面上的按钮时发生,此时(but.GetParent())->GetWindowRect( &rectParent )将导致访问违例异常,程序会崩溃,但鉴于一般程序不会在桌面窗口上添加控件,因此不必作额外的检测。
2)这段代码获得的是按钮相对于整个父窗口的坐标,包括菜单和标题栏,而不是相对于父窗口客户区的坐标。若要获得相对于父窗口客户区的坐标则要做更多处理。

本文由宠物迷 百科常识栏目发布,非常欢迎各位朋友分享到个人朋友圈,但转载请说明文章出处“在使用MFC时,.rc文件打开后是程序而不是自己编的对话框,怎么办呐

标签:宠物爱好