• 窗口鼠标点检测


    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中得到的就是窗口坐标不是屏幕坐标。




  • 相关阅读:
    Records of Pytorch in Practice
    fast.ai Lesson 2: Deep Learning 2018
    fast.ai Lesson 1: Deep Learning 2018
    Learn You a PyTorch! (aka Introduction Into PyTorch)
    Deep RL Bootcamp Frontiers Lecture I: Recent Advances,
    Deep RL Bootcamp TAs Research Overview
    Deep RL Bootcamp Lecture 10B Inverse Reinforcement Learning
    Deep RL Bootcamp Lecture 9 Model-based Reinforcement
    Deep RL Bootcamp Lecture 8 Derivative Free Methods
    Deep RL Bootcamp Lecture 7: SVG, DDPG, and Stochastic Computation Graphs
  • 原文地址:https://www.cnblogs.com/kex1n/p/2299566.html
Copyright © 2020-2023  润新知