VC --- 高手请帮忙?

ren20 2000-04-04 12:12:00
请问:
1. 虚拟键盘码是什么? VK_HOME 、 VK_UP 等等 是什么???

2. void CAaaView::OnDraw(CDC* pDC)
{
CLientDC dc(this);
...
... // draw code
}
有些程序的OnDraw函数如上,为什么不用 CDC 的 pDC ,
而用 CLientDC 的 dc 。(为什么专门声名一个设备对象 dc )

在其它地方,如OnLButtonUp函数中,我打算设计: 按下左键,
显示一矩形。
void CEx04cView::OnLButtonDown(UINT nFlags, CPoint point)
{
CClientDC dc(this);
OnPrepareDC(&dc);
...
...
}
为什么不声明 :
CDC* pDC;
OnPrepareDC(pdc);
而声明:CClientDC dc(this);
非常感谢
...全文
224 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
「已注销」 2000-04-06
  • 打赏
  • 举报
回复
这些都是SDK基本内容.看来你还不熟悉.我的建议是VC程序员应该熟读MSDN\PLATFORM SDK.
wuyunzhou 2000-04-06
  • 打赏
  • 举报
回复
"而CwindowDC是建立在整个屏幕上的,其原点在屏幕的左上角,"
NO! , the screen what is mentioned in MSDN is the screen of the Window,not the screen of computer.
wuyunzhou 2000-04-06
  • 打赏
  • 举报
回复
再说两句.CWINDOWDC指整个窗口的DC,CPAINTDC AND CCLIENTDC指客户DC,但两者仞有区别,CPAINTDC constructor call beginpaint,destructor call endpaint,you may just draw dc,and make all the invalid area valid;CClientDC constructor call getdc,destructor call releaseDc, but cann't make the invalid area valid,anyway,cann't stop WM_PAINT message,because pDC of onDraw(CDC *pDC) is truely a CPaintDC, so IN the function onDraw,CClientDC
and pDC all can be used.because my simplified chinese input suddenly don't work, so at the end I use english,sorry.
clumboy 2000-04-06
  • 打赏
  • 举报
回复
虚拟键码只是键盘按键的表示,提供了对键盘操作的识别方法。OnDraw()中CDC*pDC是作为参数传递的,一般就指向当前CClientDC对象,大可直接使用。鼠标消息处理函数中,不能用CDC*pDC创建对象,因为它只不过创建了一个指针,你还没有赋值呢。例中的方法才是正解。
RiverHill 2000-04-05
  • 打赏
  • 举报
回复
绘图要用到MFC的类CDC、CPaintDC、CClientDC、CWindowDC等,其中CDC类是基础,另外几个类是为了特殊应用由其派生出来的,这几个是有区别的,换句说,如果没有区别,那微软就没有必须再做其他两个类,而由CDC一人就代劳了。

1、CDC类包含了与图形绘制有关的大部分操作,CDC类实际上是把普通C语言与绘图有关的函数通过类封装到了一起。

2、CwindowDC与CpaintDC和CclientDC类的区别

(1) 区别:用CpaintDC类和CclientDC类的对象绘制图形时,绘制区只能在客户区。
而使用CwindowDC类还包含非客户区。CwindowDC一般在框架窗口类(CFrame)中引用,在视图类(CView)中引用CwindowDC,由于视图类只能管理客户区,所有并不能在非客户中进行绘制。
(2) 区别:在默认像素坐标系下,CpaintDC类和CclientDC类的坐标是建立在客户区的左上角,而CwindowDC是建立在整个屏幕上的,其原点在屏幕的左上角。

3、CpaintDC与CclientDC的区别:

两者虽都在客户区内工作,但机制上却有区别。
CpaintDC类应用在OnPaint函数中,以响应Windows的WM_PAINT消息,而CclientDC应用在非响应消息WM_PAINT的情况下的。
literal 2000-04-04
  • 打赏
  • 举报
回复
补充几句:
CClientDC 是只对客户区操作,坐标也相对好算一些,CDC 是它的基类可以转换至CWINDOWDC等,

929 2000-04-04
  • 打赏
  • 举报
回复
第一个虚拟键码是指WINDOWS中处理键时,将每一个按键都规定一个虚拟键码,然后在程序中一得到这个键盘码后,就知道是哪个键被按下。类似于DOS中的扫描码。
第三个问题,用指针声明也是可以的,不过用指针就要记住先NEW生成实例,在程序结束时要DELETE,指针是在堆中分配的。而直接声明CClientDC dc(this);是用一个局部变量在栈中分配,这样的好处是对象实例的分配和回收,都由系统自动完成。也就是在变量声明时,自动调用类的的建构函数,而当变量生存期结束时,自动调用析构函数。如果你愿意用指针也是可以的。
第二个问题,我觉得没有什么不可以,用PDC应该是可以的。

16,472

社区成员

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

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

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