再次提问一个对话框的句柄问题(在线等待)

coolbobo 2005-05-06 09:32:18
小弟现在遇到了以下一问题,急待解决:
现在就把程序抽象成两个类的形式吧:一般类GSnake,基于对话框类Snake。
我想实现在类GSnake的构造函数中画一矩形,矩形画在Snake实例上。这样也就当然在GSnake构造函数中获取对话框类的对话框窗口句柄。现在的问题是:
怎么来获取这一对话框窗口句柄?
我是这么做的,但是提示出错:
GSnake::GSnake()
{
CSnakeDlg *dlg =(CSnakeDlg *)AfxGetMainWnd();
CDC * pDC;
pDC = GetDC(dlg);//这儿出错
pDC->Rectangle(100,100,110,110);
pDC->ResetDC(NULL);
}
出的错是:E:\贪吃蛇游戏\snake\GSnake.cpp(30) : error C2664: 'GetDC' : cannot convert parameter 1 from 'class CSnakeDlg *' to 'struct HWND__ *'
谢谢!
...全文
274 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
coolbobo 2005-05-06
  • 打赏
  • 举报
回复
问题得到了解决了,谢谢楼上的边城浪子
正确的代码如下:
CSnakeDlg *dlg =(CSnakeDlg *)AfxGetMainWnd();
CDC * pDC;
pDC = dlg->GetDC();//这样就可以了
pDC->Rectangle(100,100,150,150);
dlg->ReleaseDC(pDC);
jerry 2005-05-06
  • 打赏
  • 举报
回复
// 这样写
GSnake::GSnake()
{
CSnakeDlg *dlg =(CSnakeDlg *)AfxGetMainWnd();
CDC * pDC;
pDC = dlg->GetDC();//这样就可以了
pDC->Rectangle(100,100,110,110);
dlg->ReleaseDC(pDC);
}

coolbobo 2005-05-06
  • 打赏
  • 举报
回复
首先感谢大家的回答
只是还是会出现错误的。也就是
E:\贪吃蛇游戏\snake\GSnake.cpp(98) : error C2065: 'FromHandle' : undeclared identifier
xhzxlqt 2005-05-06
  • 打赏
  • 举报
回复
上面有一点错误,作如下改动:
GSnake::GSnake()
{
CSnakeDlg *dlg =(CSnakeDlg *)AfxGetMainWnd();
CClientDC pDC(FromHandle(dlg->m_hWnd));
pDC.Rectangle(100,100,110,110);
}
shenailin 2005-05-06
  • 打赏
  • 举报
回复
能得到对话框的句柄那当然好实现了,
CSnakeDlg *dlg =(CSnakeDlg *)AfxGetMainWnd();
CDC * pDC;
pDC = dlg -〉GetDC();
dlg-〉Invalidate();
coolbobo 2005-05-06
  • 打赏
  • 举报
回复
OnPaint()函数中我实现了画图了。
只是现在是到另外一个类的函数,其函数功能是在对话框界面上画图了
coolbobo 2005-05-06
  • 打赏
  • 举报
回复
我现在换了,没有在构造函数中弄。
楼上说的this是指在对话框类里面的吧。这样的话,也就是说this是窗口的句柄了。

surstar 2005-05-06
  • 打赏
  • 举报
回复
CClientDC pDC(this);
pDC.Rectangle(100,100,110,110);

别在构造函数里弄,当时还没有创建好窗体没有DC~ 可以考虑一下到 OnPaint()里试一下~
coolbobo 2005-05-06
  • 打赏
  • 举报
回复
这个类不是在对话框中创建的
是和对话框类完全不同的类。
我只是要想在这个类中,实现可以在对话框中画图的功能。
我使用了上面的xhzxlqt(人这一辈子) 的方法 CClientDC* pDC(FromHandle(dlg->m_hWnd));的方法
可是出了一个错误
E:\贪吃蛇游戏\snake\GSnake.cpp(98) : error C2065: 'FromHandle' : undeclared identifier
forover 2005-05-06
  • 打赏
  • 举报
回复
请问你GSnake类的变量是在对话框类Snake中创建吗?如果是的话那么使用GetDc()就可以了
如过不是的话那么使用 xhzxlqt(人这一辈子) 的方法 CClientDC* pDC(FromHandle(dlg->m_hWnd));
coolbobo 2005-05-06
  • 打赏
  • 举报
回复
需要加什么头文件吗?
coolbobo 2005-05-06
  • 打赏
  • 举报
回复
不加参数好像不行吧,我是应该得到对话框窗口的句柄。
可是如果不加参数的话,就不能得到环境设备吧。

我按照xhzxlqt(人这一辈子) 的方法 CClientDC* pDC(FromHandle(dlg->m_hWnd));方法
提示这样的错误:
E:\贪吃蛇游戏\snake\GSnake.cpp(98) : error C2065: 'FromHandle' : undeclared identifier
forover 2005-05-06
  • 打赏
  • 举报
回复
使用 xhzxlqt(人这一辈子) 的方法 CClientDC* pDC(FromHandle(dlg->m_hWnd));
或者使用 CDC *pDC = GetDc(),注意不添参数
coolbobo 2005-05-06
  • 打赏
  • 举报
回复
那应该怎么做啊?
帮小弟解决这一问题啊,感激不尽
forover 2005-05-06
  • 打赏
  • 举报
回复
当然错了啊::GetDC(hWnd)返回类型是HDC的
xhzxlqt 2005-05-06
  • 打赏
  • 举报
回复
将kugou123(酷狗)(http://www.xiaozhou.net) ( ) 信誉:151 2005-05-06 09:39:00 得分: 0
的代码作一点小改动:

GSnake::GSnake()
{
CSnakeDlg *dlg =(CSnakeDlg *)AfxGetMainWnd();
CClientDC* pDC(FromHandle(dlg->m_hWnd));
pDC->Rectangle(100,100,110,110);
}


coolbobo 2005-05-06
  • 打赏
  • 举报
回复
怎么回事啊,还是会出错啊
错误提示:
E:\贪吃蛇游戏\snake\GSnake.cpp(32) : error C2440: '=' : cannot convert from 'struct HDC__ *' to 'class CDC *'
coolbobo 2005-05-06
  • 打赏
  • 举报
回复
非常感谢!
anlywei 2005-05-06
  • 打赏
  • 举报
回复
或者pDC = GetDC(dlg->GetSafeHwnd());
forover 2005-05-06
  • 打赏
  • 举报
回复
可以用FindWindow来找到对话框句柄
加载更多回复(2)

16,551

社区成员

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

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

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