获得CDialog指针

lc315439849 2008-06-24 12:55:17
用CDialog资源生成了一个CMyDialog类

我想在其它类里获得这个类的一个有效指针来调用CMyDialog中的成员函数
怎么么获得该类的有效指针???
...全文
164 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
Irene12 2008-06-25
  • 打赏
  • 举报
回复
直接那你定义的Dlg类,写一个对象,直接调用就行,要不就用this指针就可以
yupengchen951124 2008-06-25
  • 打赏
  • 举报
回复
CMyDialog *pDialog =NULL ;
pDialog =new CMyDialog(ID,NULL) ;
devinside 2008-06-24
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 lc315439849 的回复:]
引用 4 楼 jyh_baoding 的回复:
建立:
CMyDialog *a=new CMydialog;
a->Create(ID,NULL);
使用:

销毁:
delete a;


CMyDialog *a=new CMydialog;
调试:CMydialog hWnd = 0x000000
为什么CMydialog是空的???
[/Quote]
new 和 Create 都做了hWnd还是空的话该看看Create函数返回值了,是不是因为对话框中控件的问题没有成功创建,还有那个ID必然是如IDD_DIALOG1之类,不知楼主传的对不对
day572 2008-06-24
  • 打赏
  • 举报
回复
如果,全部工程都只用一个CMyDialog(共享),那么你就定义一个全局的变量,放在app里,在app的头文件里,定义一个public CMyDialog* test这样一个变量.
然后在cpp里,初始化,test = new CMyDialog; 这样就可以,在你想用的地方,直接调用了,举例就是AfxGetApp()->test.
tianloveyou 2008-06-24
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 cnzdgs 的回复:]
尽量利用窗口间的父子关系,用GetParent可以得到父窗口指针。如果没有直接关系,可以把CMyDialog对象或指针定义在主窗口类中,用AfxGetMainWnd可以获得主窗口指针;也可以定义在CWinApp类中或定义为全局变量。
[/Quote]
同意楼上看法
jiqing_gao 2008-06-24
  • 打赏
  • 举报
回复
关注
Amuro1987218 2008-06-24
  • 打赏
  • 举报
回复
那个dialog是不是已经创建好了?
直接用上面说的GetParent() AfxGetMainwnd()之类办法拿指针吧.

JOKER_FISH 2008-06-24
  • 打赏
  • 举报
回复
把你的代码贴上来一段吧

看看你到底是怎么定义的

仔细检查下作用域
lc315439849 2008-06-24
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 jyh_baoding 的回复:]
建立:
CMyDialog *a=new CMydialog;
a->Create(ID,NULL);
使用:

销毁:
delete a;
[/Quote]

CMyDialog *a=new CMydialog;
调试:CMydialog hWnd = 0x000000
为什么CMydialog是空的???
zhkefa 2008-06-24
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 lc315439849 的回复:]
引用 7 楼 zhkefa 的回复:
引用 6 楼 lc315439849 的回复:
引用 3 楼 zhkefa 的回复:
可以这样,

C/C++ code
m_dlg=new CMyDialog;
CWnd *pWnd=m_dlg;
pWnd->*//(调用你要的函数)


m_dlg 是指针还是对象?是哪个的指针或对象?


哦,忘写了,
m_dlg当然是CMyDialog 指针,这样声明CMyDialog *m_dlg;

pWnd里没有CMyDialog 的成员函数???
[/Quote]

要用CMyDialog的成员函数,直接m_dlg->*就行
lc315439849 2008-06-24
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 zhkefa 的回复:]
引用 6 楼 lc315439849 的回复:
引用 3 楼 zhkefa 的回复:
可以这样,

C/C++ code
m_dlg=new CMyDialog;
CWnd *pWnd=m_dlg;
pWnd->*//(调用你要的函数)


m_dlg 是指针还是对象?是哪个的指针或对象?


哦,忘写了,
m_dlg当然是CMyDialog 指针,这样声明CMyDialog *m_dlg;
[/Quote]
pWnd里没有CMyDialog 的成员函数???
zhkefa 2008-06-24
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 lc315439849 的回复:]
引用 3 楼 zhkefa 的回复:
可以这样,

C/C++ code
m_dlg=new CMyDialog;
CWnd *pWnd=m_dlg;
pWnd->*//(调用你要的函数)


m_dlg 是指针还是对象?是哪个的指针或对象?
[/Quote]

哦,忘写了,
m_dlg当然是CMyDialog 指针,这样声明CMyDialog *m_dlg;
lc315439849 2008-06-24
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 zhkefa 的回复:]
可以这样,

C/C++ code
m_dlg=new CMyDialog;
CWnd *pWnd=m_dlg;
pWnd->*//(调用你要的函数)
[/Quote]

m_dlg 是指针还是对象?是哪个的指针或对象?
lc315439849 2008-06-24
  • 打赏
  • 举报
回复
还是崩溃了!
指针有值,但CMydialog是空的..??
是要先创建CMydialog的对象吗
jyh_baoding 2008-06-24
  • 打赏
  • 举报
回复
建立:
CMyDialog *a=new CMydialog;
a->Create(ID,NULL);
使用:

销毁:
delete a;
zhkefa 2008-06-24
  • 打赏
  • 举报
回复
可以这样,

m_dlg=new CMyDialog;
CWnd *pWnd=m_dlg;
pWnd->*//(调用你要的函数)
cnzdgs 2008-06-24
  • 打赏
  • 举报
回复
尽量利用窗口间的父子关系,用GetParent可以得到父窗口指针。如果没有直接关系,可以把CMyDialog对象或指针定义在主窗口类中,用AfxGetMainWnd可以获得主窗口指针;也可以定义在CWinApp类中或定义为全局变量。
dirdirdir3 2008-06-24
  • 打赏
  • 举报
回复
CMyDialog *a=new CMydialog;
图像的增强/////////////////////////////////直方图对话框构造函数; ZFT::ZFT(CWnd* pParent /*=NULL*/) : CDialog(ZFT::IDD, pParent)//ZFT为定义的用来显示直方图的对话框类; {  Width=Height=0;//对话框初始化阶段设置图像的宽和高为"0"; } ////////////////////////对话框重画函数; void ZFT::OnPaint() {  CRect rect;//矩形区域对象;  CWnd *pWnd;//得到图片框的窗口指针;  pWnd=GetDlgItem(IDC_Graphic);//得到ZFT对话框内的"Frame"控件的指针;  file://(IDC_Graphic为放置在对话框上的一个"Picture"控件,并讲类型设置为"Frame")。  pWnd->GetClientRect(&rect);//得到"Frame"控件窗口的"视"区域;  int i;  CPaintDC dc(pWnd);//得到"Frame"控件的设备上下文;  file://画直方图的x、y轴;  dc.MoveTo(0,rect.Height());  dc.LineTo(rect.Width(),rect.Height());  dc.MoveTo(0,rect.Height());  dc.LineTo(0,0);  file://画直方图,num[]是"ZFT"的内部数组变量,存放的是图像各个灰度级出现的概率;该数组的各个分量在  显示具体图像的直方图时设置;  for(i=0;i<256;i++)//根据图像上的各个灰度级出现的概率,在坐标上对应的画出一根直线,从而各个表示各灰度级出现概率的直线构成了图像的直方图;  {   dc.MoveTo(i+1,rect.Height());   dc.LineTo (i+1,(rect.Height()-rect.Height()*num[i]*30));   file://此处num分量乘以"30"是为了放大个灰度级上对应的出现概率直线,增强显示效果;  } } //////////////////////////////////////////////////////// void ZFT::OnMouseMove(UINT nFlags, CPoint point) {//OnMouseMove函数处理鼠标消息,显示当前鼠标所在直方图上的灰度值等信息;  CWnd *pWnd,*pWndText;//定义两个窗口对象;  CPoint point1;//定义个一个点对象;  point1=point;//存放当前鼠标的位置信息;  CRect rect;//矩形对象;  CString string ;//字符串对象;  pWnd=GetDlgItem(IDC_Graphic);//得到显示直方图的框架窗口对象指针;  pWndText=GetDlgItem(IDC_NUM);//得到指向文本框对象(IDC_NUM)窗口的指针;  pWnd->GetWindowRect(&rect);//获取pWnd窗口对象窗口区域位置;  file://屏幕坐标转换为客户区坐标;  ScreenToClient(&rect);  file://判断当前鼠标是否指在直方图内;  if(rect.PtInRect (point))  {   int x=point1.x-rect.left;   file://当前鼠标位置减去区域的起始位置恰好为当前鼠标所指位置所表示的灰度级;   string.Format("%d",x);   file://显示当前位置对应的图像的灰度级;   pWndText->SetWindowText((LPCTSTR)string);  }  CDialog::OnMouseMove(nFlags, point); } //////////////////////////////////////// void CDibView::OnImagehorgm() file://在程序的"视"类对象内处理显示图像直方图的函数; {  CDibDoc *pDoc=GetDocument();  HDIB hdib;  hdib=pDoc->GetHDIB();  BITMAPINFOHEADER *lpDIBHdr;//位图信息头结构指针;  BYTE *lpDIBBits;//指向位图像素灰度值的指针;  lpDIBHdr=( BITMAPINFOHEADER *)GlobalLock(hdib);//得到图像的位图头信息  lpDIBBits=(BYTE*)lpDIBHdr+sizeof(BITMAPINFOHEADER)+256*sizeof(RGBQUAD);  file://获取图像像素值  ZFT dialog;//直方图对话框模板对象;  int i,j;  int wImgWidth=lpDIBHdr->biWidth;  int wImgHeight=lpDIBHdr->biHeight;  file://a[]数组用来存放各个灰度级出现的概率;  float a[256];  for(i=0;i<256;i++)//初始化数组;  {     a[i]=0;  }  file://统计各个灰度级出现的次数;  for(i=0;idialog.num,a,256*sizeof(float));   }  }   dialog.DoModal();//显示直方图对话框;  }  return; }
一些VC编程的技巧 Visual C++编程技巧精选(缺57-67) 1. 如何获取应用程序的实例句柄? 2. 如何通过代码获得应用程序主窗口的指针? 3.如何在程序中获得其他程序的图标? 4.如何编程结束应用程序?如何编程控制windows的重新引导? 5.怎样加载其他的应用程序? 6. 确定应用程序的路径 7. 获得各种目录信息 8. 如何自定义消息 9. 如何改变窗口的图标? 10. 如何改变窗口的缺省风格? 11. 如何将窗口居中显示? 12. 如何让窗口和 MDI窗口一启动就最大化和最小化? 13. 如何使程序保持极小状态? 14. 如何限制窗口的大小? 15. 如何使窗口不可见? 16. 如何使窗口始终在最前方? 17、如何创建一个字回绕的CEditView 18、通用控件的显示窗口 19、移动窗口 20、重置窗口的大小 21、如何单击除了窗口标题栏以外的区域使窗口移动 22、如何改变视窗的背景颜色 23、如何改变窗口标题 24、如何防止主框窗口在其说明中显示活动的文档名 25、如何获取有关窗口正在处理的当前消息的信息 26、如何创建一个不规则形状的窗口 27、如何在代码中获取工具条和状态条的指针 28、如何使能和禁止工具条的工具提示 29、如何设置工具条标题 30、如何创建和使用无模式对话框 31、如何在对话框中显示一个位图 32、如何改变对话或窗体视窗的背景颜色 33、如何获取一个对话控件的指针 34、如何禁止和使能控件 35、如何改变控件的字体 36、如何在OLE控件中使用OLE_COLOR数据类型 37、在不使用通用文件打开对话的情况下如何显示一个文件列表 38、为什么旋转按钮控件看起来倒转 39 为什么旋转按钮控件不能自动地更新它下面的编辑控件 40、如何用位图显示下压按钮 41、如何一个创建三态下压按钮 42、如何动态创建控件 43、如何限制编辑框中的准许字符 44、如何改变控件的颜色 45、当向列表框中添加多个项时如何防止闪烁 46、如何向编辑控件中添加文本 47、如何访问预定义的GDI对象 48、如何获取GDI对象的属性信息   49、如何实现一个橡皮区矩形 50、如何更新翻转背景颜色的文本 51、如何创建一个具有特定点大小的字体 52、如何计算一个串的大小 53、如何显示旋转文本 54、如何正确显示包含标签字符的串 55、串太长时如何在其末尾显示一个省略号 56、如何快速地格式化一个CString对象 68. VC1.5下如何跳到第一事例? 69. 为什么VC++2.0中使用文件对话框会死机? 70. 在VC++1.5中如何new一个大数组? 71. 在VC1.5中,如何得到子窗口在主窗口中的相对坐标? 72. VC1.5 如何调用进程? 73. VC++1.5编Win3.1程序能否实现全局跳转? 74. 如何在DLL用自定义窗口? 75. 如何让TOOLTIP的字体变大? 76.怎样更换wallpaper. 77.写打印机Preview需要用什么函数? 78.用MFC写了一个控件,如何在另一个县城里发事件? 79.关于DIADOG背景图象 80.如何显示随光标移动的提示窗口 81.怎么用VC++5.0来编写图像打印程序,我的程序是基于对话框的 82.请问怎样象Winzip一样,给Win95自己的PopMenu中添加Item. 83.问如何在Tree空件上实现点右健选中Item并下拉出菜单,如同VC5中的Workspce窗口. 84.我想在CDialog类中的树控件中响应右键弹起这一消息 85.怎样在程序中启动缺省浏览器,并进入某一网址 86.建立一束特殊效果的黑光在 Direct3D 87.列表显示所有网上邻居 88.怎样在一个应用程序中加载另一个应用程序 89.如何获得当前时间

16,472

社区成员

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

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

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