PostMessage 句柄

绿豆蛙2013 2009-08-08 01:14:32
一个对话框,ID是IDD_GRAPHDIALOG

利用这个对话框类建了5个对话框对象,那么这些对象的ID是多少?

有人告诉我说是IDD_GRAPHDIALOG+1、IDD_GRAPHDIALOG+2、。。。、IDD_GRAPHDIALOG+5

我也觉得应该是这样。



但是我在使用的时候却碰到了问题,

m_hGraphDlg = ::GetDlgItem(m_hTab, IDD_GRAPHDIALOG+1);//获取第一个对话框的句柄,其中m_hTab是一个Tab控件的句柄,对话框是放在Tab控件上的。


然后我向这个句柄的对话框PostMessage,但是利用GetLastError得到的n是等于1400的,也就是无效的句柄,所以麻烦大家帮忙分析一下问题可能在哪里,谢谢

	PostMessage(pDoc->m_hGraphDlg, WM_RECVDATAOK, pDoc->m_uiViewChannelID, 0);
int n=GetLastError();//n=1400,无效的窗口句柄
...全文
474 33 打赏 收藏 转发到动态 举报
写回复
用AI写文章
33 条回复
切换为时间正序
请发表友善的回复…
发表回复
cutrain2009 2009-08-09
  • 打赏
  • 举报
回复
id是用在资源上
而你创建的是变量,真正使用到资源创建一个使用能够使用的变量

这是我的理解,
感觉那些资源不能称为对象,自认为应该是类
MoXiaoRab 2009-08-09
  • 打赏
  • 举报
回复
在你能得到句柄的地方,搞个句柄数组存他们的句柄,就这样。
bluesky395 2009-08-09
  • 打赏
  • 举报
回复
[Quote=引用 30 楼 lzh19840809 的回复:]
在MonitorView.h 里是这样定义的对话框
C/C++ code CGraphDlg m_graphdlg[10];
[/Quote]

在文档类中定义 HWND m_hdlg[10]; 看看。。。
void CMonitorView::OnShowWindow(BOOL bShow, UINT nStatus)
{
CFormView::OnShowWindow(bShow, nStatus);
// TODO: Add your message handler code here
for(int i=0;i<5;i++)
{
m_graphdlg[i].Create(IDD_GRAPHDIALOG,this);
GetDocument()->m_hdlg[i]=m_graphdlg[i].m_hWnd;
}
}

想问一下是怎样在点击TAB控件时显示相应的对话框的?
绿豆蛙2013 2009-08-09
  • 打赏
  • 举报
回复
人呢?
绿豆蛙2013 2009-08-09
  • 打赏
  • 举报
回复
在MonitorView.h 里是这样定义的对话框
	CGraphDlg m_graphdlg[10];
绿豆蛙2013 2009-08-09
  • 打赏
  • 举报
回复
[Quote=引用 28 楼 tr0j4n 的回复:]
引用 26 楼 lzh19840809 的回复:
引用 22 楼 xy_dream 的回复:
对话框的ID就是那个
句柄应该是你对象的句柄就行为什么非要用ID得句柄呢
m_graphdlg[i].hWnd不就是句柄吗,他们ID是相同的都是IDD_GRAPHDIALOG


怎么得到m_graphdlg[i].hWnd??我是在文档类里面


管你在哪个类里面,可以得到View的指针就行了

在View搞几个变量放东西就行了
[/Quote]

view的指针是这样得到的,然后怎么做,谢谢这位兄弟的一直指点
CView *pView;
firstViewPos=GetFirstViewPosition();
pView=GetNextView(firstViewPos);
MoXiaoRab 2009-08-09
  • 打赏
  • 举报
回复
[Quote=引用 26 楼 lzh19840809 的回复:]
引用 22 楼 xy_dream 的回复:
对话框的ID就是那个
句柄应该是你对象的句柄就行为什么非要用ID得句柄呢
m_graphdlg[i].hWnd不就是句柄吗,他们ID是相同的都是IDD_GRAPHDIALOG


怎么得到m_graphdlg[i].hWnd??我是在文档类里面
[/Quote]

管你在哪个类里面,可以得到View的指针就行了

在View搞几个变量放东西就行了
绿豆蛙2013 2009-08-09
  • 打赏
  • 举报
回复
[Quote=引用 21 楼 heksn 的回复:]
为什么要创建5个相同的对话框呢  楼主是不是换种方式
[/Quote]

那你说换成什么方式,我是要在对话框上面绘图,要换成直接在页面的卡片上绘图??
绿豆蛙2013 2009-08-09
  • 打赏
  • 举报
回复
[Quote=引用 22 楼 xy_dream 的回复:]
对话框的ID就是那个
句柄应该是你对象的句柄就行为什么非要用ID得句柄呢
m_graphdlg[i].hWnd不就是句柄吗,他们ID是相同的都是IDD_GRAPHDIALOG
[/Quote]

怎么得到m_graphdlg[i].hWnd??我是在文档类里面
绿豆蛙2013 2009-08-09
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 tttyd 的回复:]
1. 你是能成功创建对话框,但是你的对话框不能成为Tab的属性页吧?即没有在Tab控件中成功放置对话框吧
2. 你使用m_graphdlg[i].Create(IDD_GRAPHDIALOG,this); 创建的对话框ID都一样。
3. 具体怎样在Tab控件中放置对话框。这有代码例子http://www.vckbase.com/document/viewdoc/?id=398
你下载下来看第五个例子就是


[/Quote]


我仔细研究了下那个程序,他那个是每个页面创建了一个对话框类,我有10个页面,岂不是要创建10个对话框类???不合适啊
dronly 2009-08-08
  • 打赏
  • 举报
回复
来学习了。
xy_dream 2009-08-08
  • 打赏
  • 举报
回复
对话框的ID就是那个
句柄应该是你对象的句柄就行为什么非要用ID得句柄呢
m_graphdlg[i].hWnd不就是句柄吗,他们ID是相同的都是IDD_GRAPHDIALOG
  • 打赏
  • 举报
回复
为什么要创建5个相同的对话框呢 楼主是不是换种方式
caixin99 2009-08-08
  • 打赏
  • 举报
回复
up
Meteor_Code 2009-08-08
  • 打赏
  • 举报
回复
都是那个IDD_GRAPHDIALOG
MoXiaoRab 2009-08-08
  • 打赏
  • 举报
回复
你在哪个类中创建嵌入的对话框的?感觉你的...有点乱。

你就算不保存指针也可以用GetWindow(GW_CHILD); 遍历控件嘛,方法太多了
MoXiaoRab 2009-08-08
  • 打赏
  • 举报
回复
对话框放在Tab里面,用的是嵌入的方法吧?
fishion 2009-08-08
  • 打赏
  • 举报
回复
在Tab中添加对话框只要吧对话框的Style设置为Child,同时调用对话框的setParent方法,里面填写Tab的句柄
绿豆蛙2013 2009-08-08
  • 打赏
  • 举报
回复
嗯,看到了,谢谢。先研究下,有问题再向您请教
雪影 2009-08-08
  • 打赏
  • 举报
回复
1. 你是能成功创建对话框,但是你的对话框不能成为Tab的属性页吧?即没有在Tab控件中成功放置对话框吧
2. 你使用m_graphdlg[i].Create(IDD_GRAPHDIALOG,this); 创建的对话框ID都一样。
3. 具体怎样在Tab控件中放置对话框。这有代码例子http://www.vckbase.com/document/viewdoc/?id=398
你下载下来看第五个例子就是

加载更多回复(13)

16,550

社区成员

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

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

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