2011-10-28 7 views
1

私はマウスカーソルを画面上のX、Y位置に移動し、マウスダウンイベントを送信し、カーソルをもう一度移動してマウスを放して線を描くC++の描画キャンバスアプリケーション/ウィンドウにマウスの上下のイベントを送信しようとしています

私は、SendInputとmouse_eventsを使っていくつかの成功を試みましたが、私が探していたものではありませんでした。

int main(int argc, char *argv[]) 
{ 
tagINPUT inp; 
tagMOUSEINPUT mi; 
DWORD moveFlags = (MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_MOVE); 
DWORD downFlags = (MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_LEFTDOWN); 
DWORD upFlags = (MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_LEFTUP); 

mi.dwFlags = moveFlags; 
mi.dx = 5000; 
mi.dy = 2000; 
inp.type = INPUT_MOUSE; 
inp.mi = mi; 

SendInput(1, &inp, sizeof inp); 

tagMOUSEINPUT mi2; 
tagINPUT inp2; 

SetCursorPos(1500, 500); 

mi2.dwFlags = downFlags; 
inp2.type = INPUT_MOUSE; 
inp2.mi = mi2; 
SendInput(1, &inp2, sizeof inp2); 

SetCursorPos(500,200); 
mi2.dwFlags = upFlags; 
inp2.type = INPUT_MOUSE; 
inp2.mi=mi2; 
SendInput(1, &inp2, sizeof inp2); 

return 0; 
} 

非常に基本的な操作で、移動、クリック、移動、および解放するだけです。

基本的に、これは通常のユーザーコントロールでうまくいきます。 Chromeがトップウィンドウの場合は、テキストをハイライト表示します。 x/yを移動して、画面上のボタン/ユーザーコントロールにすることができます。

これはMSPaint IFに必要な線を描画し、消しゴム機能が選択されている場合にのみ表示されます。私がBrushtoolを使用しようとすると、何も起こりません。フラッシュウィンドウ(http://doodle.no.de)で描画しようとしている場合も同じです。

私は、左下と左下に0x0201と0x0202を使用しようとしましたが(これらはWM_と同等です)、まったく同じように動作します。

アイデア?

答えて

0

Mouse_eventを使用する場合、このタスクを実行するのはかなり簡単です。これは私が思いついたコードです、うまくいけば、これは役に立ちます。

#include <iostream> 
#include <windows.h> 

using namespace std; 

int main() 
{ 
int pos1, pos2, pos3, pos4; 


    cout << "Enter x coordinate: "; //starting point 
    cin >> pos1; 
    cout << "Enter y coordinate: "; 
    cin >> pos2; 


    cout << "Enter x coordinate: "; //ending point 
    cin >> pos3; 
    cout << "Enter y coordinate: "; 
    cin >> pos4; 

    SetCursorPos(pos1,pos2); 
    mouse_event(MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP,0,0,0,0); //clicks on canvas 
    Sleep(30);          //puts small delay between next click 
    mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0); // holds down left mouse button 
    Sleep(300); 
    SetCursorPos(pos3,pos4); 
    mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0); //releases left mouse button 


return 0; 
} 
関連する問題