第八章 滑鼠-3

时间:2007-10-23 08:52:43   来源:chinaitzhe.com  作者:ChinaITzhe  编辑:gaopoadmin

拦截滑鼠
 

一个视窗讯息处理程式通常只在滑鼠游标位於视窗的显示区域,或非显示区域上时才接收滑鼠讯息。一个程式也可能需要在滑鼠位於视窗外时接收滑鼠讯息。如果是这样,程式可以自行「拦截」滑鼠。别害怕,这么做没什么大不了的。

设计矩形
 

为了说明拦截滑鼠的必要性,请让我们看一下BLOKOUT1程式(如程式7-6所示)。此程式看起来达到了一定的功能,但它却有十分严重的缺陷。

 程式7-6  BLOKOUT1
BLOKOUT1.C
/*----------------------------------------------------------------------------
   BLOKOUT1.C --  Mouse Button Demo Program
       (c) Charles Petzold, 1998
----------------------------------------------------------------------------*/

#include <windows.h>

LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ;

int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
                          PSTR szCmdLine, int iCmdShow)
{
      static TCHAR  szAppName[] = TEXT ("BlokOut1") ;
      HWND             hwnd ;
      MSG              msg ;
      WNDCLASS        wndclass ;
    
      wndclass.style             = CS_HREDRAW | CS_VREDRAW ;
      wndclass.lpfnWndProc       = WndProc ;
      wndclass.cbClsExtra        = 0 ;
      wndclass.cbWndExtra        = 0 ;
      wndclass.hInstance         = hInstance ;
      wndclass.hIcon             = LoadIcon (NULL, IDI_APPLICATION) ;
      wndclass.hCursor           = LoadCursor (NULL, IDC_ARROW) ;
      wndclass.hbrBackground    = (HBRUSH) GetStockObject (WHITE_BRUSH) ;
     wndclass.lpszMenuName     = NULL ;
      wndclass.lpszClassName    = szAppName ;
         
      if (!RegisterClass (&wndclass))
 {
            MessageBox ( NULL, TEXT ("Program requires Windows NT!"),
                             szAppName, MB_ICONERROR) ;
  return 0 ;
      }
    
      hwnd = CreateWindow (szAppName, TEXT ("Mouse Button Demo"),
                     WS_OVERLAPPEDWINDOW,
                     CW_USEDEFAULT, CW_USEDEFAULT,
                     CW_USEDEFAULT, CW_USEDEFAULT,
                     NULL, NULL, hInstance, NULL) ;

      ShowWindow (hwnd, iCmdShow) ;
      UpdateWindow (hwnd) ;
    
      while (GetMessage (&msg, NULL, 0, 0))
      {
            TranslateMessage (&msg) ;
            DispatchMessage (&msg) ;
      }
      return msg.wParam ;
}

void DrawBoxOutline (HWND hwnd, POINT ptBeg, POINT ptEnd)
{
      HDC hdc ;
      hdc = GetDC (hwnd) ;
      SetROP2 (hdc, R2_NOT) ;
      SelectObject (hdc, GetStockObject (NULL_BRUSH)) ;
      Rectangle (hdc, ptBeg.x, ptBeg.y, ptEnd.x, ptEnd.y) ;

1 2 3 4 5 6 7 8 9 10 11 12 13 下一页
关键字:Windows,程式,开发,入门
上一篇:第八章 滑鼠-2

相关文章

    无相关信息

文章评论

共有 0 位网友发表了评论 此处只显示部分留言 点击查看完整评论页面