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)这个干吗呢?
人气:206 ℃ 时间: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类中要定义它的三个构造函数
- 用计算器如何开5次方根(计算器的按健顺序如何操作)
- 中国时间10点30分美国是晚上多少时间?
- 以春开头的七字古诗
- “风萧萧兮易水寒,壮士一去兮不复返……”的全句是什么啊?
- 英语连词成句in,some,he,examples,showed,his,us,writing
猜你喜欢
- 一组对边_的四边形是平行四边形 两条对角线_的四边形是平行四边形 两组对角分别_的四边形是平行四边形
- 就像……一样 用英语怎么说
- 杨万里宿新市徐公店意思
- Mr.Lee is a good teacher,but he is a famous writer.___
- Tian often draws pictures after school.(用now改写句子)
- 已知A+B=2a的三次方+2a的二次方-a-2,A-C=2a的三次方-a-4a的二次方+1,求B+C
- 英语翻译
- 已知,在△ABC中,点D、E、F分别为BC、AB、AC上的点,AF平行ED,且AF=ED,延长FD到点G,使DG=FD,求证ED、AG互相平分.不能发图,请多多包含,