0

Possible Duplicate:
Get Current Cursor Position

I creating the button like this:

button = CreateWindowEx(NULL,_T("Button"),NULL,
            WS_CHILD | WS_VISIBLE | BS_BITMAP | BS_NOTIFY ,
            pos.x, pos.y, BTN_SIZE, BTN_SIZE,
            hWndDlg, (HMENU)id,hIns, NULL);

I want to drag that button,can`t figure out how to get the mouse pos X,Y relatively DialogWindow? Thank you for any help?

Community
  • 1
  • 1
Mickey Tin
  • 3,408
  • 10
  • 42
  • 71

2 Answers2

1

The message you received contains a POINT structure named pt. At least for any mouse-originated message, that's the position of the mouse at the time of the message. That's in screen coordinates, so you'll need to use ScreenToClient or (preferably) MapWindowPoints to get coordinates relative to your dialog.

Jerry Coffin
  • 476,176
  • 80
  • 629
  • 1,111
0

Try this code to see if you can figure out something.

#include <windows.h>
#include <stdio.h>

#define IDC_MAIN_BUTTON 101         // Button identifier
#define IDC_MAIN_EDIT   102         // Edit box identifier
HWND hEdit;

LRESULT CALLBACK WinProc(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam);

int WINAPI WinMain(HINSTANCE hInst,HINSTANCE hPrevInst,LPSTR lpCmdLine,int nShowCmd)
{
    WNDCLASSEX wClass;
    ZeroMemory(&wClass,sizeof(WNDCLASSEX));
    wClass.cbClsExtra=NULL;
    wClass.cbSize=sizeof(WNDCLASSEX);
    wClass.cbWndExtra=NULL;
    wClass.hbrBackground=(HBRUSH)COLOR_WINDOW;
    wClass.hCursor=LoadCursor(NULL,IDC_ARROW);
    wClass.hIcon=NULL;
    wClass.hIconSm=NULL;
    wClass.hInstance=hInst;
    wClass.lpfnWndProc=(WNDPROC)WinProc;
    wClass.lpszClassName="Window Class";
    wClass.lpszMenuName=NULL;
    wClass.style=CS_HREDRAW|CS_VREDRAW;

    if(!RegisterClassEx(&wClass))
    {
        int nResult=GetLastError();
        MessageBox(NULL, "Window class creation failed\r\n", "Window Class Failed", MB_ICONERROR);
    }

    HWND hWnd=CreateWindowEx(NULL,  "Window Class", "Mouse coords", WS_OVERLAPPEDWINDOW, 200, 200,  640, 480, NULL, NULL, hInst, NULL);

    if(!hWnd)
    {
        int nResult=GetLastError();

        MessageBox(NULL,
            "Window creation failed\r\n",
            "Window Creation Failed",
            MB_ICONERROR);
    }

    ShowWindow(hWnd,nShowCmd);

    MSG msg;
    ZeroMemory(&msg,sizeof(MSG));

    while(GetMessage(&msg,NULL,0,0))
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }

    return 0;
}

LRESULT CALLBACK WinProc(HWND hWnd,UINT msg,WPARAM wParam,LPARAM lParam)
{
    char buffer[32];

    POINT mouse;




    switch(msg)
    {
            case WM_CREATE:
            {
                // Create an edit box
                hEdit=CreateWindowEx(WS_EX_CLIENTEDGE, "EDIT",  "",     WS_CHILD|WS_VISIBLE|    ES_MULTILINE|ES_AUTOVSCROLL|ES_AUTOHSCROLL, 50, 100, 200,   100, hWnd, (HMENU)IDC_MAIN_EDIT, GetModuleHandle(NULL), NULL);
                HGDIOBJ hfDefault=GetStockObject(DEFAULT_GUI_FONT);
                SendMessage(hEdit,  WM_SETFONT, (WPARAM)hfDefault,  MAKELPARAM(FALSE,0));
                SendMessage(hEdit,  WM_SETTEXT, NULL,   (LPARAM)"Insert text here...");

                // Create a push button
                HWND hWndButton=CreateWindowEx(NULL, "BUTTON",  "OK", WS_TABSTOP|WS_VISIBLE| WS_CHILD|BS_DEFPUSHBUTTON, 50, 220,  100, 24,  hWnd, (HMENU)IDC_MAIN_BUTTON, GetModuleHandle(NULL), NULL);
                SendMessage(hWndButton, WM_SETFONT, (WPARAM)hfDefault,  MAKELPARAM(FALSE,0));
            }
            break;

            case WM_LBUTTONDOWN:
            {

                mouse.x = LOWORD(lParam); 
                mouse.y = HIWORD(lParam);     

                ScreenToClient(hWnd, &mouse);

                sprintf(buffer,"Mouse coords:  %dx%d",mouse.x,mouse.y);

                MessageBox(NULL, buffer, "Information", MB_ICONINFORMATION);

            }
            break;


            case WM_COMMAND:


                switch(LOWORD(wParam))
                {

                    case IDC_MAIN_BUTTON:
                    {
                        mouse.x = LOWORD(lParam); 
                        mouse.y = HIWORD(lParam);      

                        ScreenToClient(hWnd, &mouse);

                        SendMessage(hEdit,  WM_GETTEXT, sizeof(buffer)/sizeof(buffer[0]),   reinterpret_cast<LPARAM>(buffer));
                        sprintf(buffer,"Mouse coords:  %dx%d",mouse.x,mouse.y);
                        MessageBox(NULL, buffer, "Mouse coords", MB_ICONINFORMATION);
                    }
                    break;
                }
                break;

            case WM_DESTROY:
            {
                PostQuitMessage(0);
                return 0;
            }
            break;
    }

    return DefWindowProc(hWnd,msg,wParam,lParam);
}
Software_Designer
  • 8,490
  • 3
  • 24
  • 28