关于对话框和界面的问题

努力挣扎的中年人 2009-11-10 02:32:11
第一题:一个视图类工程,工程的主对话框的初始化是不是OnInitialUpdate()函数???相当于对话框类工程里面的OnInitDLG函数???

第二个问题:我想在调用出另一个对话框的时候进行一定的初始化,但是,新建的窗口类里面没有初始化函数,那么我应该在哪里进行自定义初始化呢?没有Oninit()函数了?新建类里只有一些最基本的函数

第三个问题:我想对退出程序进行一定的自定义编程,可以在菜单的退出中响应实现,但是点击窗口右上角的红色X关闭键的时候却没有反应,比如说:我在菜单的退出功能中添加了一个messagebox函数,点击退出的时候有反应,可以弹出这个消息框,但是当点击红色X关闭键的时候却没有弹出这个消息框,请高手们不吝赐教!请不要回答说:在wm_onclose里响应之类的这么简洁的回答,麻烦高手们回答的清楚一点,我已经试过了在onclose里面添加MSGBOX也没有反应

第四个问题:我想让我界面上的控件随着窗口大小而成比例变化,但是,搜集了那么多资料还是没能成功,同样希望高手不要只简洁的说在ONSEZE里响应....

我是个菜鸟,希望高手能帮忙回答一下
...全文
377 26 打赏 收藏 转发到动态 举报
写回复
用AI写文章
26 条回复
切换为时间正序
请发表友善的回复…
发表回复
lw_123456 2009-11-26
  • 打赏
  • 举报
回复
看看回答的怎么样
  • 打赏
  • 举报
回复
哎...看来我还是好好看看书去...谢谢老大,不好意思,让您吐血了都O(∩_∩)O哈哈~
abzhang2 2009-11-10
  • 打赏
  • 举报
回复
把老大气晕了,快打120. 119.

打120 是因为老大晕了,马上救活。
打119 是因为老大缓过气以后要发火, 119刚好用得上。
快乐鹦鹉 2009-11-10
  • 打赏
  • 举报
回复
// TODO: 在此添加消息处理程序代码和/或调用默认值
这么大的字你没看见啊???怎么写到基类调用之后呢
快乐鹦鹉 2009-11-10
  • 打赏
  • 举报
回复
真是吐血,你在CFrameWnd::OnClose()之后写还有啥用啊。要放到这个之前!!!
  • 打赏
  • 举报
回复
[Quote=引用 20 楼 happyparrot 的回复:]
谁知道你怎么写的。我一直都是这么用的,都没有出现过任何问题。
你添加ON_CLOSE函数?这是啥玩意,你不用ClassWizard添加,你自己会加么。必须是消息响应,不是随便加个函数。
[/Quote]
我写错了,我就是用向导添加的啊
void CMainFrame::OnClose()
{
// TODO: 在此添加消息处理程序代码和/或调用默认值

CFrameWnd::OnClose();
messagebox("退出?");
}
这就是函数体,函数已经定义过了,而且添加了消息映射
BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
ON_WM_CREATE()
ON_WM_CLOSE()
END_MESSAGE_MAP()
快乐鹦鹉 2009-11-10
  • 打赏
  • 举报
回复
谁知道你怎么写的。我一直都是这么用的,都没有出现过任何问题。
你添加ON_CLOSE函数?这是啥玩意,你不用ClassWizard添加,你自己会加么。必须是消息响应,不是随便加个函数。
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 yuhudie203 的回复:]
引用 16 楼 happyparrot 的回复:
晕,你这似乎是另一个问题了吧。还是先看看书吧。你不能从0一直问到10000啊。

你把老大问怒了 哈哈
得到app用AfxGetApp()
mainfrm AfxGetApp()->m_pMainWnd

再要问问题,另外开贴 呵呵
[/Quote]

哈哈,不好意思哈,有点笨...另外开贴没有这么多分额...最后一个问题哈
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 happyparrot 的回复:]
晕,你这似乎是另一个问题了吧。还是先看看书吧。你不能从0一直问到10000啊。
[/Quote]

我刚才试了一下,在MainFrame里面添加了ON_CLOSE函数,为什么没有截获到窗口关闭的消息呢???我在里面加了一个messbox以查看效果,结果一直到程序接收也没看到这个消息框,怎么回事呢???高手??我的意愿是退出前,弹一个对话框,问用户确认退出??
yuhudie203 2009-11-10
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 happyparrot 的回复:]
晕,你这似乎是另一个问题了吧。还是先看看书吧。你不能从0一直问到10000啊。
[/Quote]
你把老大问怒了 哈哈
得到app用AfxGetApp()
mainfrm AfxGetApp()->m_pMainWnd

再要问问题,另外开贴 呵呵
快乐鹦鹉 2009-11-10
  • 打赏
  • 举报
回复
晕,你这似乎是另一个问题了吧。还是先看看书吧。你不能从0一直问到10000啊。
  • 打赏
  • 举报
回复
哪位大哥能告诉我一下,在MainFrame里如何调用APP里面的一个ONEXIT函数呢???如果获取APP类的指针呢???网上只有介绍别的,貌似我说的这个没有哦,也可能是我说的这个问题超简单,只是我不知道....还有,哪里能学习到这几种类的区别呢?比如MainFrame,APP,DLG还有View
快乐鹦鹉 2009-11-10
  • 打赏
  • 举报
回复
另外,每个ListCtrl中的各行再按各自的比例分割该控件的宽度。
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 happyparrot 的回复:]
给你一段代码,你照猫画虎吧。
C/C++ codevoid CAISInfoDlg::OnSize(UINT nType,int cx,int cy)
{
CDialog::OnSize(nType, cx, cy);if(m_AISShipList.m_hWnd!= NULL)
{
CRect edtRc;
m_edtSelInfo.GetWindowRect(edtRc);
ScreenToClient(edtRc);// CRect rc;
GetClientRect(rc);
CRect rcAIS;
rcAIS.left= rc.left+2;
rcAIS.top= edtRc.bottom+2;
rcAIS.right= rcAIS.left+ rc.Width()*0.5;
rcAIS.bottom= rc.bottom-2;
m_AISShipList.MoveWindow(rcAIS);//int nScrollWidth= GetSystemMetrics(SM_CXVSCROLL)+1;int nWidth= rcAIS.Width()- nScrollWidth-2;if(nWidth>720)
{
m_AISShipList.SetColumnWidth(1,nWidth*0.12);
m_AISShipList.SetColumnWidth(2,nWidth*0.16);
m_AISShipList.SetColumnWidth(6,nWidth*0.16);
m_AISShipList.SetColumnWidth(7,nWidth*0.16);
m_AISShipList.SetColumnWidth(4,nWidth*0.1);
m_AISShipList.SetColumnWidth(5,nWidth*0.1);
m_AISShipList.SetColumnWidth(3,nWidth*0.2);
}// CRect rcStatic;
rcStatic.left= rcAIS.right+2;
rcStatic.top= rc.top+2;
rcStatic.bottom= rcAIS.bottom ;
rcStatic.right= rcStatic.left+ rc.Width()*0.25-2;
m_StaticInfoList.MoveWindow(rcStatic);// m_StaticInfoList.SetColumnWidth(0,90);
m_StaticInfoList.SetColumnWidth(1,rcStatic.Width()-95);// CRect rcDynamic;
rcDynamic.left= rcStatic.right+2;
rcDynamic.top= rc.top+2;
rcDynamic.bottom= rcAIS.bottom;
rcDynamic.right= rc.right-2;
m_DynamicInfoList.MoveWindow(rcDynamic);// m_DynamicInfoList.SetColumnWidth(0,90);
m_DynamicInfoList.SetColumnWidth(1,rcDynamic.Width()-95);// }
}
[/Quote]
嗯,谢谢,我最擅长的就是照猫画虎啦哈,谢谢高手!!!
快乐鹦鹉 2009-11-10
  • 打赏
  • 举报
回复
界面中包括三个ListCtrl控件。根据界面大小,动态调整大小。其中,三个控件所占宽度百分比分别为50%,25%和25%。高度都和界面一样高。
快乐鹦鹉 2009-11-10
  • 打赏
  • 举报
回复
给你一段代码,你照猫画虎吧。
void CAISInfoDlg::OnSize(UINT nType, int cx, int cy) 
{
CDialog::OnSize(nType, cx, cy);

if(m_AISShipList.m_hWnd != NULL)
{
CRect edtRc;
m_edtSelInfo.GetWindowRect(edtRc);
ScreenToClient(edtRc);
//
CRect rc;
GetClientRect(rc);
CRect rcAIS;
rcAIS.left = rc.left + 2;
rcAIS.top = edtRc.bottom + 2;
rcAIS.right = rcAIS.left + rc.Width() * 0.5;
rcAIS.bottom = rc.bottom - 2;
m_AISShipList.MoveWindow(rcAIS);
//
int nScrollWidth = GetSystemMetrics(SM_CXVSCROLL) + 1;
int nWidth = rcAIS.Width() - nScrollWidth - 2;
if(nWidth > 720)
{
m_AISShipList.SetColumnWidth(1,nWidth*0.12);
m_AISShipList.SetColumnWidth(2,nWidth*0.16);
m_AISShipList.SetColumnWidth(6,nWidth*0.16);
m_AISShipList.SetColumnWidth(7,nWidth*0.16);
m_AISShipList.SetColumnWidth(4,nWidth*0.1);
m_AISShipList.SetColumnWidth(5,nWidth*0.1);
m_AISShipList.SetColumnWidth(3,nWidth*0.2);
}
//
CRect rcStatic;
rcStatic.left = rcAIS.right + 2;
rcStatic.top = rc.top + 2;
rcStatic.bottom = rcAIS.bottom ;
rcStatic.right = rcStatic.left + rc.Width() * 0.25-2;
m_StaticInfoList.MoveWindow(rcStatic);
//
m_StaticInfoList.SetColumnWidth(0,90);
m_StaticInfoList.SetColumnWidth(1,rcStatic.Width() - 95);
//
CRect rcDynamic;
rcDynamic.left = rcStatic.right + 2;
rcDynamic.top = rc.top + 2;
rcDynamic.bottom = rcAIS.bottom;
rcDynamic.right = rc.right -2;
m_DynamicInfoList.MoveWindow(rcDynamic);
//
m_DynamicInfoList.SetColumnWidth(0,90);
m_DynamicInfoList.SetColumnWidth(1,rcDynamic.Width() - 95);
//
}
}
  • 打赏
  • 举报
回复
哪位高手给整理一段控件大小随窗口大小变化而改变的代码啊???谢谢谢谢啊!!!!!!
快乐鹦鹉 2009-11-10
  • 打赏
  • 举报
回复
这要看你所说的界面是对话框还是视图了,是对话框的话,你就要响应对话框的OnSize。
比如在OnSize时,根据你的界面布局策略,你确定IDC_BTN1的位置是(100,100,200,200)
那么你用MoveWindow函数移动该按钮到指定地方即可。
CRect rc(100,100,200,200);
m_btnBtn1.MoveWindow(rc);
至于这个rc的位置怎么计算,那是你的布局策略的问题,我无法帮你计算。
快乐鹦鹉 2009-11-10
  • 打赏
  • 举报
回复
在classwizard中,你可以切换选择你需要响应到哪个类中的。不用手工增加。默认选择的是视图类,你点击下拉列表选择CMainFrame即可。
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 danxuezx 的回复:]
第三个,请问在VS里,我选中了主对话框,然后在属性栏里找到消息,然后添加WM_ONCLOSE,这个时候都是默认响应到VIEW类里的,如何操作能响应到MAINFRAME类中呢??难道只能通过手工自己添加??????

您在添加的消息时不是先选择类吗?您选择了什么类添加的消息就在对应的类里。
[/Quote]
嗯,这个问题解决了,谢谢O(∩_∩)O哈!原来的时候我总是以为只有选中了主对话框才可以选择消息,原来是先选择类,然后选择消息...谢谢
加载更多回复(6)

16,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧