if (point.x == -1 && point.y ==
void CMenuView::OnContextMenu(CWnd*,CPoint point)
{
// CG:This block was added by the Pop-up Menu component
{
if (point.x == -1 && point.y == -1){
//keystroke invocation
CRect rect;
GetClientRect(rect);
ClientToScreen(rect);
point = rect.TopLeft();
point.Offset(5,5);
}
mfc里右键菜单设置,这个好像是把界面坐标转化为屏幕坐标,但是if (point.x == -1 && point.y == -1)这个干吗呢?
人气:269 ℃ 时间:2020-05-06 19:40:29
解答
point.x == -1 && point.y == -1是用来判断你鼠标右键单击时,鼠标的位置是否在客户区,即视类窗口,如果在视类窗口,则point.x和point.y都会是-1point.x和point.y指的不是鼠标在客户区的坐标吗,这种(50,100)这样的吗?是指客户区的坐标,即视类的坐标,所以才要转化成屏幕坐标所谓客户区坐标,不就是以窗口左上角为坐标原点,那么如果按你说的,如果鼠标点击在客户区后,显示的point.x和point.y不是以窗口左上角为原点的坐标吗,不是应该是(50,100)这样的吗,为什么这时的point.x和point.y不是50,100,而要判断是-1,还出来负数了,一旦负数就开始转换为屏幕坐标,这是什么逻辑我看错代码了,point.x == -1 && point.y == -1是用来判断你鼠标右键单击时,鼠标的位置是否在客户区,即视类窗口,如果(不)在视类窗口,则point.x和point.y都会是-1,然后会取当前客户区左上角坐标赋给point,而point.Offset(5, 5);是把菜单显示在鼠标右边,即point.Offset(5, 5);是把point.x和point.y各自加上5,如果不在客户区,那么菜单将显示在左上角。非常感谢您的回答,您的意思是说,函数的形参CPoint point,会接受两次赋值,第一次point.x ,point.y会被赋予-1或者其他值,并判断是否在客户区,如果在客户区第二次“然后会取当前客户区左上角坐标赋给point”,这时point.x ,point.y又会被赋值客户区的坐标,是这个过程吗?CPoint类的构造函数在初始化(使用之前)的时候会给point.x point.y这个对象赋予-1,客户区其实就是空白那个部分,例如笔记本那里可以写文字的那部分就是客户区,如果当前鼠标右击时不在客户区,那么那个弹出菜单就会在客户区的最左上角显示出来。如果在客户区,那么point.x point.y的值就不会是-1了,而是相对于客户区的坐标。
推荐
- 请问vb中 Point(X,Y)
- 编写程序:1.定义一个Point类来处理三维点points(x,y,z
- JAVA 定义一个Point类 它的对象是指一个平面上的点(x,y),在定义Point类中要定义它的三个构造函数
- 已知,a>b>0,则b^2+4/a(b-a)的最小值为
- 在某点导数怎么求 我是说怎么求左右导数 如y=|x| 怎么由该点导数判断该点是否连续
- 已知曲线y=f(x)过点(0,1),且曲线上点(x,y)处切线的斜率为x^2-2x,求该曲线的方程
- 把4千克平均分成5份,每份是( ) a 5分之4千克 b 总重量的五分之四 c
- 下列能用勒夏特列原理解释的是( ) A.Fe(SCN)3溶液中加入固体KSCN后颜色变深
猜你喜欢