小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

http://book.51cto.com/art/200801/63840.htm

 昵稱409217 2009-11-21

3.5 編寫第一個Windows程序——實(shí)時顯示鼠標(biāo)位置

http://book.51cto.com  2008-01-08 11:18  屈磊,李媛媛編著  電子工業(yè)出版社易飛思公司  我要評論(0)

3.5  編寫第一個Windows程序——實(shí)時顯示鼠標(biāo)位置

通過上面4節(jié)的內(nèi)容,Windows編程的基本內(nèi)容都已講解完了。在本節(jié)中,就用一個例子來應(yīng)用前面講解的知識,從而對Windows編程有一個更加完整的認(rèn)識。

實(shí)例3-14:實(shí)時顯示鼠標(biāo)在窗口中的位置。

程序的目的是捕獲鼠標(biāo)在進(jìn)入程序窗口后的位置,并且在鼠標(biāo)移動的時候,實(shí)時跟蹤鼠標(biāo)運(yùn)動,同時顯示鼠標(biāo)當(dāng)前的坐標(biāo)。在程序中將通過WM_MOUSEMOVING來取得鼠標(biāo)的實(shí)時坐標(biāo),并且在窗口的中間將鼠標(biāo)的位置顯示出來。

根據(jù)前面學(xué)過的知識直接生成一個Win32的應(yīng)用程序,然后加入下面的代碼即可,當(dāng)然也可以直接使用光盤中的程序文件。

窗口的創(chuàng)建和主程序代碼如下:

            

int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR     lpCmdLine,
int       nCmdShow)
{
// TODO: Place code here.
MSG msg;

MyRegisterClass(hInstance);

// Perform application initialization:
if (!InitInstance (hInstance, nCmdShow))
{
return FALSE;
}

// Main message loop:
while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}

return msg.wParam;
}

ATOM MyRegisterClass(HINSTANCE hInstance)
{
WNDCLASSEX wcex;

wcex.cbSize = sizeof(WNDCLASSEX);

wcex.style   = CS_HREDRAW | CS_VREDRAW;
wcex.lpfnWndProc  = (WNDPROC)WndProc;
wcex.cbClsExtra  = 0;
wcex.cbWndExtra  = 0;
wcex.hInstance  = hInstance;
wcex.hIcon   = LoadIcon(hInstance, (LPCTSTR)IDI_MOUSEMOVE);
wcex.hCursor   = LoadCursor(NULL, IDC_ARROW);
wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
wcex.lpszMenuName = NULL;
wcex.lpszClassName = "MouseMove";
wcex.hIconSm   = LoadIcon(wcex.hInstance, (LPCTSTR)IDI_SMALL);

return RegisterClassEx(&wcex);
}

BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
{
HWND hWnd;

hInst = hInstance; // Store instance handle in our global variable

hWnd = CreateWindow(  "MouseMove",
"實(shí)時鼠標(biāo)位置", WS_OVERLAPPEDWINDOW,
     CW_USEDEFAULT,
0,
CW_USEDEFAULT,
0,
NULL,
NULL,
hInstance,
NULL);

if (!hWnd)
{
return FALSE;
}

ShowWindow(hWnd, nCmdShow);
UpdateWindow(hWnd);

return TRUE;
}

Windows的窗口處理函數(shù)的代碼如下,注意WM_MOUSEMOVE消息響應(yīng)的處理。在這個消息處理中,使用了另外的一種獲取圖形設(shè)備句柄的方法。

            

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
PAINTSTRUCT ps;
HDC hdc;
POINT pt;
CHAR szString[255];

switch (message)
{
case WM_PAINT:
hdc = BeginPaint(hWnd, &ps);
// TODO: Add any drawing code here...
EndPaint(hWnd, &ps);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
case WM_MOUSEMOVE:     //響應(yīng)鼠標(biāo)的移動
pt.x = LOWORD(lParam); //取得x的坐標(biāo)
pt.y = HIWORD(lParam); //取得y的坐標(biāo)
//空格的目的是保證顯示的正確性。sprintf函數(shù)目的是將需要輸出
//的信息轉(zhuǎn)換成字符串
sprintf( szString, "[ %d,  %d ]   ", pt.x, pt.y );
hdc = GetDC( hWnd );
//輸出字符串
TextOut( hdc, 300, 200, szString, strlen( szString ) );
ReleaseDC( hWnd, hdc );
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
return 0;
}

程序運(yùn)行結(jié)果如圖3-16所示。

圖3-16  鼠標(biāo)實(shí)時捕捉結(jié)果
上面的程序是完整的實(shí)時顯示鼠標(biāo)的程序代碼。在WM_MOUSEMOVE中讀取鼠標(biāo)位置使用到了兩個宏,由于本書的篇幅有限,因此對這兩個宏的詳細(xì)使用和適用位置,不做解釋,在MSDN中有詳細(xì)的說明。
GetDC()函數(shù)和ReleaseDC()函數(shù)是一對函數(shù)。GetDC()函數(shù)的使用范圍是非WM_PAINT消息。在這個消息以外如果需要取得圖形設(shè)備句柄,那么就只能通過這個函數(shù)來讀取。當(dāng)使用完成后,需要使用ReleaseDC()來釋放句柄。

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多