有两个小问题请各位高手指教,急急!!

wxf54318 2009-07-28 10:05:04
1 我用MFC建个了单文档工程,单击菜单项弹出一个对话框,我用VC的向导为对话框产生了一个类,我向向View类窗口发送消息,请问如何得到VIEW类窗口的句柄???
2 在VIEW类中我在消息响应函数中创建了线程用于处理数据,但是数据处理是需要时间的,消息响应函数返回我的线程内核对象是不是也就销毁了,假如这样的话怎么保证数据能处理完成呢???
...全文
170 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
wxf54318 2009-08-02
  • 打赏
  • 举报
回复
gordon3000,如何通过框架转发消息呢
wxf54318 2009-08-01
  • 打赏
  • 举报
回复
GetAcitveView()->PostMessage()应该只能在CMAINFRAME类中使用吧,这和::PostMessage(this->GetActiveView()->m_hWnd,WM_SAVETXT,0,0);
应该没什么区别吧
arose616725 2009-07-31
  • 打赏
  • 举报
回复
为什么不用 GetAcitveView()->PostMessage();或GetActiveView->SendMessage()?
wxf54318 2009-07-31
  • 打赏
  • 举报
回复
gordon3000,我用了你的方法,可是报错了
h:\datadisplay\datadisplayview.h(32) : error C2143: syntax error : missing ';' before '*'
h:\datadisplay\datadisplayview.h(32) : error C2501: 'CDataDisplayDoc' : missing storage-class or type specifiers
h:\datadisplay\datadisplayview.h(32) : error C2501: 'GetDocument' : missing storage-class or type specifiers
wxf54318 2009-07-30
  • 打赏
  • 举报
回复
我试了一下会报错
SCMAKE: error BK1506 : cannot open file '.\Debug\SaveIntervalDlg.sbr': No such file or directory
我觉得应该是因为我在VIEW类中定义了CSaveIntervalDlg* m_SaveIntervalDlg;这个对话框指针,
我还在void CDataDisplayView::OnFileSave()
{
if(m_SaveIntervalDlg == NULL)
{
m_SaveIntervalDlg = new CSaveIntervalDlg;
m_SaveIntervalDlg->Create(IDD_SAVEINTERVALDLG,this);//创建设置保存间隔非模态对话框
m_SaveIntervalDlg->ShowWindow(SW_SHOW);
}
else
m_SaveIntervalDlg->ShowWindow(SW_SHOW);
}
中使用了对话框指针
我想对话框类源文件包含的类的头文件中又定义对话框的指针,是要产生问题的
副组长 2009-07-30
  • 打赏
  • 举报
回复
上述各位大侠推荐的向View类发送消息是问题的正解。如果你没有搞定这个,还有其它方法可以选择。
非模态对话框的建立时你使用了this指针,这个就是View类的指针,你可以在对话框类头文件里面
class CXXXView;
CXXXView * m_pXXXView;
在对话框cpp文件
#include XXXView.h
m_pXXXView =(CXXXView *)this;
这样你就拥有了View类的指针m_pXXXView,可以直接对View类进行任何操作而不使用消息机制。
还有一种方案是向主框架发送用户定义消息,主框架向所有的子框架,子窗口广播转发这个消息,在需要响应的窗口写消息响应函数。因为你可以在任何时间和位置获得主框架,所以适用性强。还有一个优点是如果你有多个文档模板、多个子框架、多个view的时候,省却了许多判断文档、View的开销。
总之,条条大路通罗马,用熟了就得心应手。
你的第二个问题应该没有问题。
rcswhuang 2009-07-29
  • 打赏
  • 举报
回复
哦 你是在对话框里面发消息给view?
把对话框的属性中设置成child就可以用GetParent()->m_hWnd。
driverstudent 2009-07-29
  • 打赏
  • 举报
回复

mark
wxf54318 2009-07-29
  • 打赏
  • 举报
回复
afirst,第一个问题你说的用postMessage(m_hWnd,xx,xx,xx)就是可以了啊 ,没有发给VIEW类啊,而是发给对话框自己了
rcswhuang 2009-07-29
  • 打赏
  • 举报
回复
第一个问题:
你就在这个view里面发送消息给view本身
你只要postMessage(m_hWnd,xx,xx,xx)就是可以了啊
你用GetParent()肯定是view的父亲了就是整个框架类了啊
第二个问题:
你的整个主进程不是还没有结束嘛?有其他线程存在的话,是不会结束的。除非你关了主进程。这里的主进程就是你生成的那个单文档结构的程序。
j8daxue 2009-07-29
  • 打赏
  • 举报
回复
试下GetParent()->GetRuntimeClass()->m_szClassName.得到的是什么的指针
wxf54318 2009-07-29
  • 打赏
  • 举报
回复
我单击菜单项的响应函数是这样写的
void CDataDisplayView::OnFileSave()
{
m_SaveInterValDlg = new CSaveIntervalDlg;
m_SaveInterValDlg->Create(IDD_SAVEINTERVALDLG,this);//创建设置保存间隔非模态对话框
m_SaveInterValDlg->ShowWindow(SW_SHOW);
}
但是我在对话框的POSTMESSAGE中用GetParent()->m_hWnd得到的好像不是view类窗口句柄,我发送的消息没有传到VIEW类。
wxf54318 2009-07-29
  • 打赏
  • 举报
回复
我第二个问题还没有解决,请高手讲解下
j8daxue 2009-07-29
  • 打赏
  • 举报
回复
要不你再Dialog里加个成员 CView*
在对话框创建开始domodal或create传个指针过去
wxf54318 2009-07-29
  • 打赏
  • 举报
回复
哪位高手可以给点详细说明
wxf54318 2009-07-29
  • 打赏
  • 举报
回复
spy++怎么用啊
jasonM2008 2009-07-29
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 wxf54318 的回复:]
我单击菜单项的响应函数是这样写的
void CDataDisplayView::OnFileSave()
{
  m_SaveInterValDlg = new CSaveIntervalDlg;
  m_SaveInterValDlg->Create(IDD_SAVEINTERVALDLG,this);//创建设置保存间隔非模态对话框
  m_SaveInterValDlg->ShowWindow(SW_SHOW);
}
但是我在对话框的POSTMESSAGE中用GetParent()->m_hWnd得到的好像不是view类窗口句柄,我发送的消息没有传到VIEW类。
[/Quote]
肯定不是你的VIEW类窗口句柄啊!!应该是MainFrame的句柄,你用spy++看看就知道了!!
用这个试一试!!
CView* GetActiveView( ) const;
wxf54318 2009-07-29
  • 打赏
  • 举报
回复
问题越来越怪!!
wxf54318 2009-07-29
  • 打赏
  • 举报
回复
我实在定时时间到发送消息的
我现在知道GetParent()->m_hWnd得到的是CMAINFRAME窗口的句柄,我在CMAINFRAME中又建立了消息映射把消息转发到了CVIEW窗口了,
但是新问题出现了
CVIEW类可以响应对话框消息了,但是我在CVIEW类的消息响应函数或是函数建立的线程好像不受对话框类设置的定时器控制,执行了多次,这又是什么原因呢。
wxf54318 2009-07-28
  • 打赏
  • 举报
回复
wangjs720,能说的具体点吗,HWND hWndView = pMyView->m_hWnd;中的pMyView是怎么产生的
那么我在消息处理函数中创建创建线程,是不是等于在主线程中创建线程呢。
加载更多回复(1)

16,551

社区成员

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

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

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