zoukankan      html  css  js  c++  java
  • 窗口鼠标点检测

    UI控件都是图片渲染而成的。。

    我采用ID3DXSperite的Draw()方法来渲染2D图片,在进行控件的鼠标检测时遇到问题。。。。有些区域检测不到,后来查了一下觉着是创建窗口的问题。

    比如: 

    #define WINDOW_WIDTH 800
    #define WINDOW_HEIGHT 600

    #define DWSTYLE (WS_OVERLAPPEDWINDOW | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX)

    若CreateWindowEx是之间把上边的宽个高传进去,那么创建的窗口的大小确实是800*600,但是这是整个窗口的尺寸,实际上我们程序中用到的是客户区,就是整个窗口刨去菜单等边框的大小。所以客户区的大小要小于800*600。

    用下面的代码实现:

     1     //
    2 RECT windowRect = { 0, 0, WINDOW_WIDTH, WINDOW_HEIGHT };
    3 AdjustWindowRectEx( &windowRect, DWSTYLE, NULL, CW_USEDEFAULT);
    4
    5 HWND hWnd = CreateWindowEx(WS_EX_CONTROLPARENT,
    6 TEXT("D3D"), TEXT("D3D"),
    7 DWSTYLE,
    8 CW_USEDEFAULT,
    9 0,
    10 (windowRect.right - windowRect.left),
    11 (windowRect.bottom - windowRect.top),
    12 GetDesktopWindow(),
    13 NULL,
    14 wc.hInstance,
    15 NULL);
    16 //

    此时我认为应该解决了这个问题,但是还是不行。。。

    如:我渲染的图片的大小为200*200,那么图片的右下角还是检测不到。。。只有左上部分可以检测的到。后来点击图片的右下角得到鼠标点的实际位置为(255, 255),此时才明白原来是图片尺寸的原因。。。 D3DXSprite渲染的2D图片要求是2的幂次方,像200这样的,就自动转换成256*256的大小了。。。也就是给你放大了。。。所以检测不到。 ps:检测代码如下:

     1     D3DXVECTOR2 absolutePos;
    2 absolutePos.x = 0;
    3 absolutePos.y = 0;
    4
    5 GetAbsolutePosition(&absolutePos);
    6
    7 if ((x >= absolutePos.x) && (x <= absolutePos.x + GetWidth()) &&
    8 (y >= absolutePos.y) && (y <= absolutePos.y + GetHeight()) )
    9 {
    10 return true;
    11 }
    12 else
    13 {
    14 return false;
    15 }

    另外:

    鼠标点击时的屏幕坐标与窗口坐标之间的关系:

    1. 将屏幕坐标转换到窗口坐标

                POINT pt1;
    GetCursorPos(&pt1);
    ScreenToClient(m_hWnd, &pt1);

    2. 

    bool PostMessage(UINT msg, WPARAM wParam, LPARAM lParam, void* pData)
    {
    switch (msg)
    {
    case WM_LBUTTONDOWN:
    {

    POINT pt;
    pt.x = LOWORD(lParam);
    pt.y = HIWORD(lParam);

    。。。

    }

    pt中得到的就是窗口坐标不是屏幕坐标。




  • 相关阅读:
    对白
    泰芒了
    下雨
    聚会
    周末了
    One English Sentence
    Struts拦截器使用
    JAVA语法题
    jquery全选框的实现
    实战3--设计实体, 映射实体
  • 原文地址:https://www.cnblogs.com/kex1n/p/2299566.html
Copyright © 2011-2022 走看看