关于“窗口”和“视口”的区别?

semicom 2003-12-31 04:18:06
Windows编程中的“视口”和“窗口”的问题,书上说的都不详细,我看不懂(《windows编程》、《MFC核心技术》都看过)
text映射模式下
SetViewportOrgEx(hdc,10,10,NULL);运行后
视口原点还是(0,0)吗?
客户区左上角是(0,0)吗?
视口原点与设备点(0,0)有区别吗?
公式:xViewport=(xWindow-xWinOrg)*xViewExt/xWinExt+xViewOrg
中,为什么是(xWindow-xWinOrg)?
我觉得应是(xWindow+xWinOrg)才可理解
怎样才能透彻理解这两个概念,我被搞糊涂了!
...全文
846 43 打赏 收藏 转发到动态 举报
写回复
用AI写文章
43 条回复
切换为时间正序
请发表友善的回复…
发表回复
typhoon20 2004-01-10
  • 打赏
  • 举报
回复
我仍然坚持:
你说的那个original point是指物理的还是逻辑的,还是2者?如果只是逻辑的我赞同,我指的是物理的原点可以映射为多个逻辑坐标,但是在物理坐标系中它的原点始终是窗口左上角,即(0,0),这是我的意见
你呢?wangyangcheng(矛盾)
wangyangcheng 2004-01-10
  • 打赏
  • 举报
回复

----------------------------------------------------------------
原贴内容:
你说的那个original point是指物理的还是逻辑的,还是2者?如果只是逻辑的我赞同,我指的是物理的原点可以映射为多个逻辑坐标,但是在物理坐标系中它的原点始终是窗口左上角,即(0,0),这是我的意见
----------------------------------------------------------------
原贴内容:
First,I think the original point can be set to (0,0)﹐but it isn't necessary.

----------------------------------------------------------------
原贴内容:
我觉得这2个函数:SetWindowOrgEx()與SetViewportOrgEx()分别改变的是逻辑原点在物理坐标系中的位置和物理原点在逻辑坐标系中的位置,但是物理原点始终是窗口左上角,即(0,0),这点是不变
semicon 2004-01-06
  • 打赏
  • 举报
回复
有道理!
wangyangcheng 2004-01-05
  • 打赏
  • 举报
回复
我覺得原點可在(0,0)但不一定非得在(0,0)-->也可在其它的點。

不則無法解釋這些問題。
typhoon20 2004-01-04
  • 打赏
  • 举报
回复
说实话,这个我确实也没弄清楚,我只是强记了programming windows上的话
就是把物理点(cxClient / 2, cyClient / 2)映射到逻辑视图的(-cxClient / 2, -cyClient / 2)
至于为什么会这样我真的没想通
哈哈,可见我也是刚起步的把
yyfa6 2004-01-04
  • 打赏
  • 举报
回复
mark
wangyangcheng 2004-01-04
  • 打赏
  • 举报
回复
請小魚兒一下﹕
SetViewportOrgEx( hdc, cxClient / 2, cyClient / 2, NULL );
SetWindowOrgEx( hdc, -cxClient / 2, -cyClient / 2, NULL );

連續執行以上兩條語句后的效果﹗
fanhaizhou2003 2004-01-04
  • 打赏
  • 举报
回复

dim strcomputer as string
strcomputer = "Canfarserver"
NetResource netres(NetResource 是结构体)
问题是如何获得
1:strcomputer 的long 指针
2:netres的地址(long指针)
高分请教!
wangyangcheng 2004-01-04
  • 打赏
  • 举报
回复
比如說﹕
case WM_PAINT:

hdc = BeginPaint( hwnd, &ps );

SelectObject( hdc, GetStockObject( SYSTEM_FIXED_FONT ) );

SetMapMode( hdc, MM_LOMETRIC );

SetViewportOrgEx( hdc, cxClient / 2, cyClient / 2, NULL );

TextOut( hdc, -( cxClient / 2 / GetDeviceCaps( hdc, LOGPIXELSX ) * 25.4 / 10 ), 0, szHeading, lstrlen( szHeading ) );
szUndLine ) ); //我想在這名將從窗口最左邊輸出szHeading,這樣寫可否?

EndPaint( hwnd, &ps );
return 0;
wangyangcheng 2004-01-04
  • 打赏
  • 举报
回复
請問如何得到當前窗口的大小?(以像素﹑mm﹑英寸為單位均可)。

-->

這個我自已來答﹐一時搞忘記了﹕
HIWORD( lParam );
LOWORD( lParam );
wangyangcheng 2004-01-04
  • 打赏
  • 举报
回复
哪這樣說來SetWindowOrgEx()與SetViewportOrgEx()是用不同的方式來達到同一種效果嘍?
typhoon20 2004-01-04
  • 打赏
  • 举报
回复
那是因为默认情况下逻辑坐标系为MM_TEXT,在这个情况下它的y向下是正的
所以SetViewportOrgEx( hdc, cxClient / 2, cyClient / 2, NULL );
我还是认为视口原点是不变的
而且上面的语句只是改变逻辑原点为物理坐标表示的点(cxClient / 2, cyClient / 2)
btw:我也是一个beginner,我想直接用sdk开发的人很少了,但是学这个以后,我想对于学vc还是挺有用的
shenyc 2004-01-04
  • 打赏
  • 举报
回复
视口就是你看到的
窗口是一个逻辑存在的、你可以在上面画东西的、虚拟的Window,视口是你看到的窗口的一部分
wangyangcheng 2004-01-04
  • 打赏
  • 举报
回复
我想視口坐標的方向是不變的﹐但為何又有SetViewportOrgEx( hdc, cxClient / 2, cyClient / 2, NULL );

這說明視口坐標的原點和范圍還是可變的吧?

btw:謝謝小黃魚的熱情解答﹐我是一個beginner﹐不知現在還有不有人在做SDK的實際開發?
apa007 2004-01-04
  • 打赏
  • 举报
回复
看看《深入浅出MFC》
typhoon20 2004-01-04
  • 打赏
  • 举报
回复
一般数学上的原点肯定是(0,0)了
typhoon20 2004-01-04
  • 打赏
  • 举报
回复
哈哈,不瞒你说,我还没看到字体呢,所以我也不知道了,我想等我们看到字体就应该能找到答案了,哈哈!
对于原点,我认为就是(0,0)了,不过现在有2个坐标系,一个是逻辑的,一个是装置的,
所以很容易搞混的。
wangyangcheng 2004-01-04
  • 打赏
  • 举报
回复
TO:小黃魚
可否請你幫忙看看我這個貼子?
http://expert.csdn.net/Expert/topic/2598/2598534.xml?temp=.2378199
wangyangcheng 2004-01-04
  • 打赏
  • 举报
回复
同意!

只是我現在還不能確定原點等價于(0,0)?

typhoon20 2004-01-04
  • 打赏
  • 举报
回复
如果将视埠原点改变为(xViewOrg,yViewOrg),则逻辑点(0.0)就会映射为装置点(xViewOrg,yViewOrg)。如果将视窗原点改变为(xWinOrg,yWinOrg),则逻辑点(xWinOrg,yWinOrg)将会映射为装置点(0,0),即左上角。不管对视窗和视埠原点作什么改变,装置点(0,0)始终是显示区域的左上角。
这段话可以这样理解把:
SetViewportOrgEx (hdc, xViewOrg, yViewOrg, NULL) ;这句就意味着把逻辑点(0.0)就会映射为装置点(xViewOrg,yViewOrg)
SetWindowOrgEx (hdc, xWinOrg,yWinOrg, NULL) ;这句表示则逻辑点(xWinOrg,yWinOrg)将会映射为装置点(0,0),即左上角
加载更多回复(23)

16,551

社区成员

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

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

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