intTypePromotion=1
zunia.vn Tuyển sinh 2024 dành cho Gen-Z zunia.vn zunia.vn
ADSENSE

Lập trình windows với MFC Micrisoft visual C++6.0- P3

Chia sẻ: Cong Thanh | Ngày: | Loại File: PDF | Số trang:10

204
lượt xem
45
download
 
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

Ðể hỗ trợ ứng dụng trong việc trang trí giao diện đồ họa (Graphic Device Interface - GDI) như màn hình, máy in., windows cung cấp một hệ thống các công cụ đồ họa cơ bản như sau: Pen : Công cụ vẽ điểm hoặc đường thẳng. Brush : Công cụ tô màu. Font : Công cụ qui định kiểu ký tự cho nội dung văn bản. Bitmap : Công cụ quản lý vùng ảnh điểm. Palette : Công cụ quản lý bộ màu hiển thị. Region : Công cụ quản lý vùng hiển thị có dạng bất kỳ. ...

Chủ đề:
Lưu

Nội dung Text: Lập trình windows với MFC Micrisoft visual C++6.0- P3

  1. CHƯƠNG 3: Cấu trúc quản lý 1 điểm: typedef struct _POINT { int x, y Các lớp GIAO DIỆN đồ họa của MFC // Tọa độ ( hoành độ, tung độ ) của điểm } POINT ; Cấu trúc quản lý 1 vùng hình chữ nhật: 3.1 CÁC CÔNG CỤ GIAO DIỆN ÐỒ HỌA: typedef struct _RECT { Ðể hỗ trợ ứng dụng trong việc trang trí giao diện đồ họa (Graphic int top, left; // Tọa độ góc trái trên hình chữ nhật. Device Interface - GDI) như màn hình, máy in., windows cung cấp một int right, bottom; // Tọa độ góc phải dưới hình chữ nhật. hệ thống các công cụ đồ họa cơ bản như sau: } RECT ; Pen : Công cụ vẽ điểm hoặc đường thẳng. Cấu trúc quản lý chiều rộng và chiều cao vùng hình chữ nhật: Brush : Công cụ tô màu. typedef struct _SIZE { Font : Công cụ qui định kiểu ký tự cho nội dung văn bản. int cx, cy; // Chiều rộng, chiều cao vùng hình chữ Bitmap : Công cụ quản lý vùng ảnh điểm. nhật. Palette : Công cụ quản lý bộ màu hiển thị. } SIZE ; Region : Công cụ quản lý vùng hiển thị có dạng bất kỳ. Thông qua các công cụ nói trên, ứng dụng trong windows có thể thực 3.4 CÁC LỚP MFC HỖ TRỢ GDI: hiện các tác vụ đồ họa cơ bản một cách dễ dàng mà không phải bận tâm MCF cung cấp một hệ thống phong phú các lớp với đầy đủ chức năng đến cấu trúc vật lý của thiết bị hiển thị. Các công cụ này gọi là công cụ nhằm hỗ trợ người dùng tối đa trong lập trình GDI. Với việc vận dụng kỹ GDI. thuật OOP trên các lớp GDI của MFC, người dùng dễ dàng tạo ra ứng dụng mong muốn mà không phải viết quá nhiều mã lệnh trong chương 3.2 DEVICE CONTEXT: trình. Việc khai thác khả năng của các công cụ GDI được thực hiện thông qua một cấu trúc chứa thông tin quản lý thiết bị hiển thị: Device Context 3.4.1 Các lớp đối tượng điểm, hình chữ nhật: (DC). Tại mỗi thời điểm, mỗi DC được phép gắn với một thiết bị hiển thị CPoint : Lớp đối tượng điểm, tương ứng với cấu trúc POINT. đồ họa và sử dụng một bộ các công cụ GDI duy nhất. Muốn sử dụng một CRect : Lớp đối tượng vùng hình chữ nhật trên giao diện đồ họa, công cụ GDI mới thì DC phải chấm dứt sử dụng công cụ tương ứng mà tương ứng với cấu trúc RECT. CRect có các hành vi đặc trưng sau: nó đang dùng. • CRect( ); Tạo lập đối tượng vùng hình chữ nhật rỗng. Mỗi khi một DC được tạo mới, hệ thống tự động chuẩn bị một bộ công • CRect (int left, int top, int right, int bottom); Tạo lập đối tượng cụ GDI (trừ bitmap) mặc nhiên cho nó. Ứng dụng có thể tùy nghi thay đổi vùng hình chữ nhật có thông số xác định. các công cụ này cho phù hợp với nhu cầu của ứng dụng. • int Width( ) const; Trả về độ rộng vùng hình chữ nhật. • int Heigth( ) const; Trả về độ cao vùng hình chữ nhật. 3.3. TỌA ÐỘ TRÊN GIAO DIỆN ÐỒ HỌA: • void NormalizeRect( ); Hợp lý hóa các thành phần tọa độ của Việc định vị trên giao diện đồ họa được thực hiện dựa trên hệ trục tọa độ có gốc (0,0) là góc trái-trên (top-left corner) của giao diện đồ họa, rect mà không làm thay đổi vị trí và kích thước của nó. chiều dương của trục hoành (trục x) hướng từ trái sang phải, chiều dương VD: Giả sử khởi tạo một rect không hợp lệ như sau: của trục tung (trục y) hướng từ trên xuống dưới. Trên mặt phẳng giao CRect rect( 100, 0, 0, 50 ); // rect.left = 100 > rect.right = 0 diện đồ họa đó: rect. NormalizeRect(); Ðiểm: Biểu diễn bằng cặp tọa độ (x,y). rect trở nên hợp lệ với: rect ( 0, 0, 100, 50 ); Hình chữ nhật: Biểu diễn bằng cặp đỉnh góc trái trên và góc phải CSize : Lớp đối tượng kích thước, tương ứng với cấu trúc SIZE. dưới. 3.4.2 Lớp CPen: Thông tin về điểm, vùng hình chữ nhật và kích thước của các đối CPen là lớp đối tượng quản lý pen, một công cụ GDI quan trọng của tượng trong mặt phẳng giao diện đồ họa được đặc tả thông qua các cấu DC. Thông qua đối tượng này, DC có thể thay đổi màu sắc, nét vẽ của trúc sau: Caùc lôùp giao dieän ñoà hoïa cuûa MFC Laäp trình Windows vôùi MFC - Microsoft Visual C++ 6.0 - Leâ Ngoïc Thaïnh - lntmail@yahoo.com 29 30
  2. điểm hay đường thẳng mà DC sẽ trực hiện. CPen có các hành vi đặc tự được sử dụng cho việc hiển thị các nội dung văn bản. Các hành vi đặc trưng sau: trưng: CPen( ); Tạo lập đối tượng pen rỗng. Chúng ta phải khởi tạo tham CFont( ); Tạo lập đối tượng font rỗng. CFont(const LOGFONT* lpLogFont ); Tạo lập đối tượng font với số cho đối tượng này trước khi sử dụng. CPen ( // Tạo lập đối tượng pen với tham số thông số đầy đủ. Giá trị thông số được ấn định bởi tham số kiểu int nPenStyle, // Kiểu nét vẽ cấu trúc LOGFONT chứa thông tin. LOGFONT được khai báo như int nWidth, // Ðộ rộng nét vẽ (=1: mặc nhiên) sau: COLORREF crColor // Màu sắc của nét vẽ typedef struct tagLOGFONT { ); LONG lfHeight; // chiều cao của ký tự nPenStyle có thể nhận một trong các giá trị sau: LONG lfWidth; // chiều rộng trung bình các ký tự PS_SOLID : PS_DASH : LONG lfEscapement; // góc (1/10) giữa hướng in và trục X PS_DOT : PS_DASHDOT : LONG lfOrientation; // góc (1/10) giữa ký tự và trục X (No 9x) crColor có thể nhận giá trị từ macro phối màu RGB( ) như sau: LONG lfWeight; // mức độ đậm của font chữ (0 - 1000) RGB (int màu_đỏ , int màu_xanh_lá_cây , int màu_xanh_dương BYTE lfItalic; // = TRUE : Chữ nghiêng ) BYTE lfUnderline; // = TRUE : Chữ gạch dưới Mỗi màu được đặc trưng bằng một giá trị trong đoạn 0255 phản BYTE lfStrikeOut; // = TRUE : Chữ gạch ngang thân ánh độ sáng của nó. Bộ phối màu theo qui tắc phối màu tự BYTE lfCharSet; // bộ ký tự (=DEFAULT_CHARSET ) nhiên. BYTE lfOutPrecision; // = OUT_DEFAULT_PRECIS BOOL CreatePen( int nPenStyle, int nWidth, COLORREF crColor BYTE lfClipPrecision; // = CLIP_DEFAULT_PRECIS ); Khởi tạo thông số cho đối tượng pen. Ý nghĩa tham số như trên. BYTE lfQuality; // = DEFAULT_QUALITY operator HPEN() const; Toán tử chuyển kiểu, trả về handle của BYTE lfPitchAndFamily; // =DEFAULT_PITCH|FF_DONTCARE pen (HPEN) quản lý bởi đối tượng. TCHAR lfFaceName[LF_FACESIZE]; // Chuỗi tên của font } LOGFONT ; 3.4.3 Lớp CBrush: Win9x chỉ dùng lfEscapement. CBrush là lớp đối tượng quản lý brush, công cụ GDI của DC. Thông int GetLogFont( LOGFONT * pLogFont ); Lấy thông tin của font qua đối tượng này, DC có thể thay đổi màu sắc, dạng của nét tô trong quản lý bởi đối tượng font chữ. Kết quả được điền vào biến kiểu một vùng hình chữ nhật mà DC sẽ trực hiện. CBrush có các hành vi đặc LOGFONT chỉ bởi tham số kiểu con trỏ LOGFONT* : pLogFont. trưng sau: operator HFONT( ); Toán tử chuyển kiểu, trả về handle của font CBrush( ); Tạo lập đối tượng brush rỗng. được quản lý bởi đối tượng. CBrush( COLORREF crColor ); Tạo lập đối tượng brush có màu tô BOOL CreateFontIndirect( LOGFONT *lpLogFont ); Khởi tạo thông tương ứng với màu qui định bởi tham số crColor. số cho đối tượng font từ thông tin lưu trong cấu trúc chỉ bởi CBrush( int nIndex, COLORREF crColor ); Tạo lập đối tượng brush lpLogFont. có màu tô crColor, và nét tô nIndex. Giá trị nét tô có thể là: HS_VERTICAL (đường kẻ sọc đứng), 3.4.5 Lớp CBitmap: HS_HORIZAONTAL (đường kẻ sọc ngang). CBitmap là lớp đối tượng quản lý bitmap, một công cụ GDI quan trọng BOOL CreateSolidBrush( COLORREF crColor ); Tạo đặc tính tô giúp quản lý vùng ảnh điểm (pixels) của DC. Thông qua đối tượng này, đặc với màu crColor cho đối tượng brush chưa có thông số. DC có thể dễ dàng tạo nội dung trang trí trên giao diện đồ họa từ nội operator HBRUSH() const; Toán tử chuyển kiểu, trả về handle của dung ảnh có sẵn được lưu trong tập tin, đồng thời thực hiện các tác vụ xử brush (HBRUSH) quản lý bởi đối tượng. lý ảnh cơ bản trên nội dung đó. CBitmap cung cấp các hành vi đặc trưng sau: 3.4.4 Lớp CFont: CBitmap( ); Tạo lập đối tượng bitmap rỗng. CFont là lớp đối tượng quản lý font, công cụ GDI của DC. Thông qua đối tượng này, DC thực hiện ấn định font, kiểu dáng, kích thước của bộ ký Caùc lôùp giao dieän ñoà hoïa cuûa MFC Laäp trình Windows vôùi MFC - Microsoft Visual C++ 6.0 - Leâ Ngoïc Thaïnh - lntmail@yahoo.com 31 32
  3. BOOL LoadBitmap( UINT nIDResource ); Tạo nội dung cho đối Mỗi phần tử của palPalEntry có kiểu PALETTEENTRY phản ánh tượng bitmap với thông tin được lấy từ một ảnh trong resource. giá trị màu dùng hiển thị màu chỉ mục (color index) tương ứng với vị nIDResource : số hiệu của ảnh bitmap trong resource của chương trí thứ tự của nó. Cấu trúc PALETTEENTRY có nội dung như sau: trình. typedef struct tagPALETTEENTRY { BOOL CreateCompatibleBitmap ( BYTE peRed ; // Giá trị thành phần màu đỏ CDC* pDC, // Con trỏ đối tượng DC tương ứng BYTE peGreen ; // Giá trị thành phần màu xanh lá cây int nWidth, // Chiều rộng, BYTE peBlue ; // Giá trị thành phần màu xanh dương int nHeight // chiều cao tính bằng pixel của bitmap được tạo. BYTE peFlags ; // Vai trò màu trong hệ thống. ); Tạo nội dung cho đối tượng bitmap với thông tin về màu sắc, độ } PALETTEENTRY; phân giải tương ứng với DC chỉ bởi con trỏ tham số pDC. int GetBitmap( BITMAP* pBitMap ); Lấy thông tin về bitmap được operator HPALETTE( ) const; Toán tử chuyển kiểu, trả về handle quản lý bởi đối tượng. Kết quả nhận được sẽ được điền vào biến có của palette quản lý bởi đối tượng. kiểu BITMAP chỉ bởi tham số kiểu con trỏ BITMAP* : pBitmap. 3.4.7 Lớp CRgn: Cấu trúc BITMAP bao gồm các trường có ý nghĩa như sau: CRgn là lớp đối tượng quản lý region, một công cụ GDI quan trọng typedef struct tagBITMAP { /* bm */ giúp DC ấn định vùng ảnh xử lý có hình dạng tùy ý trên giao diện đồ họa int bmType ; // Kiểu bitmap, của nó. int bmWidth ; // Chiều rộng bitmap tính bằng pixel CRgn( ); Tạo lập đối tượng vùng ảnh rỗng. int bmHeight ; // Chiều cao bitmap tính bằng pixel BOOL CreateRectRgn( int x1, int y1, int x2, int y2 ); Khởi tạo thông int bmWidthBytes ; // Kích thước 1 dòng pixel trong bitmap số cho đối tượng vùng ảnh bằng 1 hình chữ nhật với tọa độ góc trái BYTE bmPlanes ; // Số màu. trên và góc phải dưới lần lượt là (x1, y1) và (x2, y2). BYTE bmBitsPixel ; // Số bit màu của 1 pixel BOOL CreateEllipticRgn( int x1, int y1, int x2, int y2 ); Khởi tạo LPVOID bmBits ; // Ðịa chỉ vùng nhớ chứa pixel của thông số cho đối tượng vùng ảnh bởi hình ellipse nội tiếp hình chữ bitmap nhật có góc trái trên (x1, y1) và góc phải dưới (x2, y2). } BITMAP; BOOL CreatePolygonRgn ( LPPOINT lpPoints, // Mảng chứa tọa độ các điểm ziczac operator HBITMAP() const; Toán tử chuyển kiểu, trả về handle của int nCount, bitmap được quản lý bởi đối tượng. // Số phần tử POINT trong mảng trên int nMode // = WINDING 3.4.6 Lớp CPalette: ); CPalette là lớp đối tượng quản lý palette, một công cụ GDI của DC. Khởi tạo thông số cho đối tượng vùng ảnh bởi một đường ziczac Thông qua đối tượng này, DC có thể tạo ra các hiệu ứng màu trên giao khép kín qua các điểm có tọa độ xác định và được lưu trong một diện đồ họa bằng cách thay đổi các bộ màu một cách phù hợp. mảng. CPalette( ); Tạo lập đối tượng palette rỗng. int CombineRgn ( CreatePalette( LPLOGPALETTE lpLogPalette ); Khởi tạo thông số CRgn* pRgn1, // Con trỏ đối tượng quản lý vùng ảnh thứ nhất cho đối tượng palette rỗng. Con trỏ tham số lpLogPalette chỉ đến CRgn* pRgn2, // Con trỏ đối tượng quản lý vùng ảnh thứ hai biến kiểu cấu trúc LOGPALETTE chứa thông tin bộ màu dùng khởi int nCombineMode // Cách kết hợp hai vùng ảnh tạo. ); Tạo thông số cho đối tượng vùng ảnh trên cơ sở kết hợp hai vùng typedef struct tagLOGPALETTE { ảnh đã có. Tham số nCombineMode có thể là: WORD palVersion; // Số hiệu palette hệ thống RGN_AND : Vùng ảnh kết quả là vùng giao nhau giữa hai vùng WORD palNumEntries; // Số màu sử dụng ảnh. PALETTEENTRY palPalEntry[1]; // Chứa các giá trị màu, RGN_OR : Vùng ảnh kết quả là vùng hợp giữa hai vùng ảnh. // có số phần tử mảng bằng palNumEntries RGN_DIFF : Vùng ảnh kết quả là vùng bù giữa hai vùng ảnh. } LOGPALETTE ; Caùc lôùp giao dieän ñoà hoïa cuûa MFC Laäp trình Windows vôùi MFC - Microsoft Visual C++ 6.0 - Leâ Ngoïc Thaïnh - lntmail@yahoo.com 33 34
  4. UINT nFormat operator HRGN() const; Toán tử chuyển kiểu, trả về handle của // Chứa thông tin canh chỉnh chuỗi hiển vùng ảnh quản lý bởi đối tượng. thị. ); In nội dung chuỗi lên giao diện đồ họa của DC với các canh 3.5 LỚP CDC: chỉnh. CDC là lớp đối tượng quản lý DC. Thông qua đối tượng DC, khả năng lpRect : Chỉ đến biến kiểu RECT chứa thông tin giới hạn vùng hiển của các công cụ đồ họa được khai thác cho việc trang trí giao diện đồ thị. họa quản lý bởi DC. CDC có các hành vi đặc trưng như sau: nFormat : Cho phép kết hợp một cách hợp lý các canh chỉnh trong CDC( ); Tạo lập đối tượng DC rỗng. vùng hình chữ nhật giới hạn. Các thông số canh chỉnh có thể là: virtual BOOL CreateCompatibleDC( CDC* pDC ); Khởi tạo thông DT_CENTER : Chỉnh giữa theo chiều ngang số cho đối tượng DC một cách tương thích với một DC có sẵn được DT_VCENTER : Chỉnh giữa theo chiều dọc chỉ bởi con trỏ tham số pDC. DT_RIGHT : Chỉnh phải. virtual BOOL DeleteDC( ); Hủy bỏ đối tượng DC. CPoint MoveTo( int x, int y ); Ấn định điểm vẽ hiện hành. CPen* SelectObject( CPen* pPen ); Chọn công cụ vẽ mới cho DC. BOOL LineTo( int x, int y ); Vẽ đường thẳng từ điểm vẽ hiện hành pPen : con trỏ đến đối tượng pen sẽ được dùng cho DC. đến điểm có tọa độ (x, y). Hàm trả về con trỏ chỉ đến đối tượng pen mà DC đang sử dụng. void FillRect ( Có thể sử dụng hành vi này cho các công cụ trang trí khác của LPCRECT lpRect, // Con trỏ chỉ đến biến kiểu RECT. DC. Kết quả trả về là con trỏ đến đối tượng đang dùng tương ứng. CBrush* pBrush // Con trỏ đến đối tượng brush dùng tô màu. CPent* GetCurrentPen( ); Trả về giá trị con trỏ của đối tượng pen ); Tô màu vùng hình chữ nhật được xác định bởi các giá trị chứa đang được sử dụng bởi DC. trong biến kiểu RECT do tham số lpRect chỉ đến. Một cách tương tự cho các công cụ trang trí khác. void Draw3dRect ( // Vẽ hình chữ nhật 3 chiều virtual COLORREF SetBkColor( COLORREF crColor ); Ðặt màu LPCRECT lpRect, // Con trỏ đến biến RECT nền cho DC. crColor là giá trị màu đặt. COLORREF clrTopLeft, // Màu vẽ cạnh trái và cạnh trên. COLORREF GetBkColor( ); Trả về giá trị màu nền của DC. COLORREF clrBottomRight // Màu vẽ cạnh phải và cạnh dưới virtual COLORREF SetTextColor( COLORREF crColor ); Ấn định ); màu được sử dụng để hiển thị các nội dung văn bản trên DC. BOOL DrawEdge ( COLORREF GetTextColor( ); Trả về giá trị màu hiện dùng để hiển LPRECT lpRect, // Con trỏ đến biến kiểu RECT. thị các nội dung văn bản trên DC. UINT nEdge, // Cách vẽ trên các gờ (trong, ngoài) cạnh. int SetBkMode ( int nBkMode ); Ấn định chế độ hiển thị nền ký tự UINT nFlags // Các cạnh được vẽ. biểu diễn nội dung văn bản. nbkMode chứa thông số ấn định: ); Vẽ khung chữ nhật với hiệu ứng 3 chiều. TRANSPARENT : Nền chữ hiển thị trong suốt. nEdge có thể kết hợp các giá trị sau: OPAQUE : Chữ hiển thị có màu nền. BDR_RAISEDINNER : Vẽ nổi gờ trong int GetBkMode( ); Lấy chế độ hiển thị chữ của DC. BDR_SUNKENINNER : Vẽ chìm gờ trong virtual BOOL TextOut ( BDR_RAISEDOUTER : Vẽ nổi gờ ngoài int x, y , // Tọa độ bắt đầu hiển thị BDR_SUNKENOUTER : Vẽ chìm gờ ngoài LPCTSTR lpszString, // Nội dung chuỗi hiển thị. nFlags có thể kết hợp các giá trị sau: int nCount // Chiều dài chuỗi. BF_RECT : Vẽ tất cả các cạnh ); Hiển thị nội dung chuỗi văn bản lên giao diện đồ họa của DC. BF_TOPLEFT : Vẽ cạnh trái và cạnh trên virtual int DrawText ( BF_BOTTOMRIGHT : Vẽ cạnh phải và cạnh dưới LPCTSTR lpszString, // Nội dung chuỗi hiển thị BOOL DrawState ( int nCount, // Chiều dài chuỗi CPoint pt, // Ðiểm đặt góc trái trên của ảnh trên DC LPRECT lpRect, // Con trỏ đến biến kiểu RECT CSize size, // Kích thước vùng hiển thị ảnh CBitmap* pBitmap, // Con trỏ đối tượng bitmap được vẽ Caùc lôùp giao dieän ñoà hoïa cuûa MFC Laäp trình Windows vôùi MFC - Microsoft Visual C++ 6.0 - Leâ Ngoïc Thaïnh - lntmail@yahoo.com 35 36
  5. UINT nFlags, DWORD dwRop // = DST_BITMAP (vẽ bitmap) // Cách chụp pixel từ ảnh nguồn. CBrush* pBrush // Con trỏ đối tượng Brush, sử dụng khi vẽ ); Tương tự BitBlt nhưng ảnh đích và ảnh nguồn có thể có kích // Bitmap ẩn: nFlags |= DSS_DISABLED thước khác nhau nên tạo hiệu ứng co dãn ảnh chép được so với ); Vẽ bitmap hoặc icon lên DC. ảnh nguồn. BOOL BitBlt ( BOOL DrawIcon ( int x, int y, int x, int y, // Tọa độ góc trái trên và // Tọa độ góc trái trên nơi đặt icon trên DC int nWidth, int nHeight, HICON hIcon // kích thước vùng nhận ảnh. // Handle của icon CDC* pSrcDC, ); Vẽ icon hIcon lên vị trí (x, y) của DC quản lý bởi đối tượng. // Con trỏ đối tượng quản lý DC nguồn. int xSrc, int ySrc, // Góc trái trên phần ảnh nguồn được 3.6 LỚP CImagelist: chép. CImageList là lớp đối tượng imagelist. Mỗi imagelist cho phép quản lý DWORD dwRop // Cách chụp pixel từ ảnh nguồn. danh sách ảnh có cùng kích thước và hỗ trợ nhiều tiện ích trên chúng. ); Chụp nội dung phần ảnh bắt đầu từ vị trí (xSrc,ySrc) trong DC CImageList( ); Tạo lập đối tượng imagelist rỗng. nguồn sang vùng nhận ảnh bắt đầu từ vị trí (x, y), với kích thước BOOL Create ( (nWidth, nHeight) trong DC quản lý bởi đối tượng. UINT nBitmapID, // Số hiệu của resource bitmap chứa các Giá trị pixel được chuyển vào vùng nhận ảnh tùy thuộc vào giá trị ảnh tham số dwRop. Một số giá trị dùng cho tham số này có thể như int cx, // Ðộ rộng mỗi ảnh trong bitmap nói trên sau: int nGrow, // Số ảnh trong bitmap • SRCCOPY : Giá trị pixel lấy trực tiếp từ pixel của ảnh nguồn. COLORREF crMask // Màu mặt nạ (không hiển thị) • SRCPAINT : Là kết quả OR của pixel ảnh nguồn và ảnh nhận. ); Khởi tạo nội dung cho đối tượng từ một bitmap trong resource. int GetImageCount( ); Số ảnh của imagelist quản lý bởi đối tượng. • SRCAND : Là kết quả AND của pixel ảnh nguồn và ảnh int Add ( nhận. CBitmap* pbmImage, // Con trỏ đối tượng bitmap của ảnh BOOL MaskBlt ( mới. int x, int y, // Tọa độ góc trái trên và CBitmap* pbmMask | // Ðối tượng bitmap mặt nạ hoặc int nWidth, int nHeight, // Kích thước vùng nhận ảnh [ COLORREF crMask ] // màu mặt nạ của ảnh mới. CDC* pSrcDC, // Con trỏ đối tượng quản lý DC nguồn ); Thêm một ảnh (bitmap) vào imagelist. int xSrc, int ySrc, // Góc trái trên phần ảnh được chép BOOL BeginDrag( int nImage, CPoint ptHotSpot ); Chuẩn bị CBitmap& maskBitmap, // Con trỏ đối tượng bitmap mặt nạ chuyển ảnh thứ nImage trong imagelist với vị trí bắt đầu ptHotSpot. int xMask, int yMask, // Góc trái trên vùng ảnh làm mặt nạ static BOOL DragEnter( CWnd* pWndLock, CPoint point ); Cấm DWORD dwRop // Cách chụp pixel từ ảnh nguồn. cửa sổ pWndLock, nơi mà imagelist đang thực hiện chuyển ảnh. ); Tương tự BitBlt nhưng sử dụng mặt nạ lọc pixel. Ðối tượng static BOOL DragMove(CPoint pt); Chuyển ảnh nImage đến vị trí maskBitmap sử dụng ảnh trắng đen (monochrome bmp) mà mỗi pt. pixel "đen" sẽ ngăn việc chuyển pixel ở vị trí tương ứng từ DC static BOOL DragLeave( CWnd* pWndLock ); Chấm dứt tình trạng nguồn sang DC quản lý bởi đối tượng, các vị trí khác được chuyển bị cấm của cửa sổ pWndLock. bình thường. static void EndDrag( ); Chấm dứt tác vụ chuyển ảnh. BOOL StretchBlt ( static BOOL DragShowNolock( BOOL bShow ); Hiển thị hoặc che int x, int y, // Tọa độ góc trái trên và ảnh trong quá trình chuyển hình. int nWidth, int nHeight, // Kích thước vùng nhận ảnh. BOOL Draw ( CDC* pSrcDC, // Con trỏ đối tượng DC nguồn. CDC* pdc, // Ðối tượng DC dùng vẽ hình int xSrc, int ySrc, // Tọa độ góc trái trên và int nImage, // Số thứ tự hình được vẽ trong imagelist int nSrcWidth, int nSrcHeight, // Kích thước phần ảnh được POINT pt, // Tọa độ góc trái trên nơi vẽ hình chép. Caùc lôùp giao dieän ñoà hoïa cuûa MFC Laäp trình Windows vôùi MFC - Microsoft Visual C++ 6.0 - Leâ Ngoïc Thaïnh - lntmail@yahoo.com 37 38
  6. UINT nStyle // Kiểu vẽ = ILD_NORMAL ); Vẽ hình nImage của imagelist quản lý bởi đối tượng lên DC. BOOL DrawIndirect ( CDC* pDC, int nImage,POINT pt, // Tương tự Draw SIZE sz, // Kích thước vùng nhận ảnh POINT ptOrigin, // Góc trái trên phần ảnh được vẽ UINT fStyle, // Kiểu ảnh ( = ILD_NORMAL ) DWORD dwRop , // Cách chép pixel ( = SRCCOPY ) COLORREF rgbBack , // Màu vùng bị lọc = CLR_DEFAULT COLORREF rgbFore // Màu phối hợp cho fStyle có thông số // ILD_BLEND25 hoặc ILD_BLEND50 ( = CLR_DEFAULT) ); Vẽ hình nImage. Ðối tượng GDI được khởi tạo trong chương trình bởi hành vi Createxxx cần được hủy bỏ khi chấm dứt sử dụng để tránh lãng phí bộ nhớ hệ thống: - Các đối tượng công cụ GDI, sử dụng hành vi: DeleteObject( ); - Các đối tượng quản lý thiết bị đồ họa, sử dụng hành vi: DeleteDC( ); Caùc lôùp giao dieän ñoà hoïa cuûa MFC 39
  7. CHƯƠNG 4: WS_HSCROLL : Cửa sổ có thanh trượt ngang ở biên. WS_VSCROLL : Cửa sổ có thanh trượt dọc ở biên. Cửa sổ giao diện và lớp CWnd WS_MAXIMIZEBOX : Có hộp phóng to trên caption của cửa s ổ. WS_MINIMIZEBOX : Có hộp thu nhỏ trên caption của cửa sổ. 4.1 CỬA SỔ GIAO DIỆN: WS_THICKFRAME : Viền cho phép thay đổi kích thước cửa Cửa sổ giao diện là thành phần quan trọng của ứng dụng. Nó không s ổ. chỉ đóng vai trò trung gian trong trao đổi thông tin giữa ứng dụng với WS_VISIBLE : Cửa sổ nhìn thấy được (hiển thị). người dùng bởi giao diện đồ họa dễ nhìn mà còn là công cụ xử lý Ví dụ: WS_POPUP | WS_CAPTION : Cửa sổ chính có tiêu đề. message hiệu quả và không thể thiếu cho cơ chế điều phối message của lpszClassName là một tên đã đăng ký cho lớp cửa sổ. Ngoài các ứng dụng windows. Bên cạnh đó, cửa sổ giao diện còn làm chức năng nhận diện ứng tên mà windows đã đăng ký như STATIC, BUTTON, EDIT, ... dụng, là thẻ thông hành cho ứng dụng trong hành trình tồn tại, hoạt động (chương 8), ta có thể đăng ký tên lớp cửa sổ riêng của mình một độc lập cũng như phối hợp trao đổi dữ liệu với các ứng dụng khác trong cách tùy ý. Việc đăng ký tên lớp cửa sổ có thể thực hiện bằng một windows. trong hai cách sau: • Ðăng ký trực tiếp: 4.2 LỚP CWnd: LPCTSTR AFXAPI AfxRegisterWndClass ( CWnd là lớp đối tượng quản lý cửa sổ của windows. Thông qua các UINT nClassStyle, // Thông số dạng của cửa sổ thuộc tính và hành vi của lớp CWnd, MFC cung cấp các dịch vụ cần thiết HCURSOR hCursor = 0, // Cursor hiển thị trong cửa sổ cho phép tạo lập và khai thác các tính năng của cửa sổ windows một HBRUSH hbrBackground = 0, // Brush dùng tô nền cửa sổ cách dễ dàng. HICON hIcon = 0 // Icon trên tiêu đề của cửa sổ HWND m_hWnd : Thuộc tính lưu handle của cửa sổ. ); Trả về chuỗi tên lớp cửa sổ được đăng ký. Các lần đăng ký CWnd( ); Hành vi tạo lập đối tượng cửa sổ. tên lớp cửa sổ có tham số giống nhau sẽ nhận được một tên duy virtual BOOL Create ( nhất. LPCTSTR lpszClassName, // Tên đăng ký của lớp cửa sổ Tham số nClassStyle có thể kết hợp từ các giá trị sau: LPCTSTR lpszWindowName, // Tên cửa sổ. CS_HREDRAW : Cửa sổ được vẽ lại khi chiều rộng thay đổi. DWORD dwStyle, // Các thông số về dạng cửa sổ CS_VREDRAW : Cửa sổ được vẽ lại khi chiều cao thay đổi. const RECT& rect, // Qui định vị trí, kích thước cửa sổ CS_NOCLOSE : Cấm hộp đóng [] trên tiêu đề của cửa sổ. CWnd* pParentWnd, // Con trỏ đối tượng cửa sổ cha UINT nID, Ví dụ: Ðăng ký lớp cửa sổ có nền màu xanh dương. // Số hiệu cửa sổ CCreateContext* pContex = NULL CString myClassName; ); Khởi tạo thông số cho cửa sổ quản lý bởi đối tượng. CBRUSH myBrush; Tham số dwStyle qui định đặc điểm và kiểu dáng cửa sổ. Giá trị myBrush.CreateSolidBrush( RGB ( 0, 0, 255 ) ); dùng cho tham số này có thể kết hợp một số trong các giá trị sau: myClassName = AfxRegisterWndClass ( WS_POPUP : Cửa sổ được tạo là cửa sổ chính. CS_VREDRAW | CS_HREDRAW, WS_CHILD : Cửa sổ được tạo là cửa sổ con. NULL, myBrush, NULL ); WS_TABSTOP : Cửa sổ con, chuyển được bằng phím tab. • Ðăng ký qua cấu trúc chứa các thông số: WS_OVERLAPPED : Cửa sổ chính. BOOL AFXAPI AfxRegisterClass( WNDCLASS* lpWndClass ); WS_SYSMENU : Cửa sổ có hộp menu hệ thống. Hàm trả về giá trị TRUE nếu tác vụ đăng ký thành công. Thực WS_BORDER : Cửa sổ có viền. hiện đăng ký theo cách này tránh được sự dùng chung tên lớp WS_CAPTION : Cửa sổ có tiêu đề (caption) cửa sổ ở hai ứng dụng khác nhau khi hai ứng dụng này tình cờ WS_DISABLED : Cửa sổ bị cấm. đăng ký các tên lớp cửa sổ giống nhau về thông số. WS_DLGFRAME : Cửa sổ có viền đậm kiểu hộp thoại, Laäp trình Windows vôùi MFC - Microsoft Visual C++ 6.0 - Leâ Ngoïc Thaïnh - lntmail@yahoo.com Cöûa soå giao dieän vaø lôùp CWnd 40 41
  8. lpWndClass là con trỏ chỉ đến biến có kiểu cấu trúc LPVOID lpCreateParams; // Con trỏ vùng chứa thông số cửa WNDCLASS. sổ HANDLE hInstance; // Handle của ứng dụng typedef struct _WNDCLASS { HMENU hMenu; // Handle của menu gắn với cửa sổ UINT style; // Dạng của lớp đăng ký HWND hwndParent; // Handle của cửa sổ cha WNDPROC lpfnWndProc; // Con trỏ hàm WindowProc của int cy; int cx; // Chiều rộng và cao của cửa sổ // cửa sổ. Có thể lấy hàm do int y; int x; // Tọa độ góc trái trên của cửa sổ MFC LONG style; // Thông số ấn định dạng cửa sổ // khai báo sẵn: AfxWndProc LPCSTR lpszName; // Tên cửa sổ được tạo int cbClsExtra; // Dành riêng của hệ thống LPCSTR lpszClass; // Tên lớp cửa sổ dùng cho cửa sổ int cbWndExtra; // Dành riêng của hệ thống DWORD dwExStyle; // Thông số ấn định dạng mở rộng HINSTANCE hInstance; // Instance handle của ứng } CREATESTRUCT; dụng Trong các lớp kế thừa CWnd, hành vi này được dùng để can HICON hIcon; // Handle của icon thiệp cài đặt các ấn định riêng trên cấu trúc thông số cs của cửa HCURSOR hCursor; // Handle của cursor s ổ. HBRUSH hbrBackground; // Handle của brush vẽ nền BOOL EnableWindow( BOOL bEnable = TRUE ); Cho phép hoặc LPCTSTR lpszMenuName; // Chuỗi tên menu trong cấm hoạt động của cửa sổ. resource BOOL ShowWindow( int nCmdShow ); Ấn định trạng thái hiển thị LPCTSTR lpszClassName; // Tên lớp cửa sổ đăng ký của cửa sổ trên màn hình. Giá trị cho tham số nCmdShow có thể } WNDCLASS; là: BOOL CreateEx ( SW_HIDE : Dấu cửa sổ DWORD dwExStyle, // Các thông số dạng mở rộng SW_MINIMIZE : Thu nhỏ cửa sổ LPCTSTR lpszClassName, // Tên lớp SW_RESTORE : Ðưa cửa sổ về trạng thái trước đó LPCTSTR lpszWindowName, // Tên cửa sổ SW_SHOW : Hiển thị cửa sổ DWORD dwStyle, // Dạng cửa sổ SW_SHOWNA : Hiển thị nhưng không kích hoạt cửa int x, int y, // Tọa độ góc trái trên của cửa sổ sổ int nWidth, int nHeight, // Chiều rộng và cao của cửa sổ SW_SHOWMAXIMIZED : Hiển thị và phóng to cửa sổ HWND hwndParent, // Handle của cửa sổ cha SW_SHOWMINIMIZED : Hiển thị và thu nhỏ cửa sổ HMENU nIDorHMenu, // Handle của menu gắn với cửa sổ BOOL SetWindowPos ( LPVOID lpParam = NULL const CWnd* pWndInsertAfter, // Con trỏ cửa sổ làm mốc ); Khởi tạo cửa sổ với việc sử dụng các thông số mở rộng về dạng. int x, int y, // Tọa độ góc trái trên của cửa sổ Tham số dwExStyle qui định dạng mở rộng của cửa sổ có thể kết int cx, int cy, // Kích thước cửa sổ hợp từ các giá trị sau: UINT nFlags // Thông số trạng thái WS_EX_TOPMOST : Cửa sổ không bị che khuất. ); Ấn định vị trí cửa sổ trên màn hình. WS_EX_TOOLWINDOW : Cửa sổ không hiển thị trên taskbar. Giá trị pWndInsertAfter qui định vị trí đặt cửa sổ theo chiều thứ 3 WS_EX_TRANSPARENT : Cửa sổ có nền trong suốt. (z-order). Giá trị này có thể như sau: WS_EX_CLIENTEDGE : Cửa sổ có gờ quanh vùng client. wndBottom : Cửa sổ được đặt dưới mọi cửa sổ. virtual BOOL PreCreateWindow( CREATESTRUCT& cs ); Hành vi wndTop : Cửa sổ được đặt trên các cửa sổ thông thường. được thực hiện trước khi windows khởi tạo thông số cho cửa sổ. wndTopMost : Cửa sổ được đặt trên mọi cửa sổ. Tham biến cs kiểu CREATESTRUCT chứa thông số khởi tạo. Tham số nFlags qui định trạng thái mới của cửa sổ: typedef struct tagCREATESTRUCT { SWP_SHOWWINDOW : Hiển thị cửa sổ. Laäp trình Windows vôùi MFC - Microsoft Visual C++ 6.0 - Leâ Ngoïc Thaïnh - lntmail@yahoo.com Cöûa soå giao dieän vaø lôùp CWnd 42 43
  9. BOOL bRedraw = TRUE // Vẽ lại cửa sổ sau tác vụ đặt font ? SWP_DRAWFRAME : Vẽ lại frame của cửa sổ. SWP_NOREDRAW : Không cập nhật lại thông tin cửa sổ. ); Ấn định font chữ cho cửa sổ. void MoveWindow ( CMenu* GetMenu( ); Trả về con trỏ đối tượng menu gắn với cửa int x, int y, // Tọa độ mới cho góc trái trên s ổ. int nWidth, int nHeight, BOOL SetMenu( CMenu* pMenu ); Gắn menu cho cửa sổ. // Chiều rộng và chiều cao của cửa sổ BOOL bRepaint = TRUE // Yêu cầu windows vẽ lại cửa sổ CWnd* GetParent( ); Trả về con trỏ đến đối tượng cửa sổ cha. int GetScrollPos( int nBar ); Trả về vị trí hiện hành của nút cuộn ); Thay đổi vị trí và kích thước của cửa sổ. void GetWindowRect( LPRECT lpRect ); Lấy thông tin tọa độ, kích trên thanh cuộn. nBar chứa số hiệu thanh cuộn quan tâm. nBar có thước của cửa sổ, lpRect chỉ đến biến kiểu RECT chứa kết quả. thể là: SB_HORZ : Thanh cuộn ngang. void GetClientRect( LPRECT lpRect ); Lấy thông tin tọa độ, kích SB_VERT : Thanh cuộn dọc. thước vùng client của cửa sổ, lpRect chỉ đến biến RECT chứa kết int SetScrollPos ( quả. int nBar, // Thanh cuộn được chọn int GetWindowRgn(HRGN hRgn); Xác định vùng hiển thị của cửa int nPos, // Vị trí đặt s ổ. BOOL bRedraw = TRUE // Vẽ lại thanh cuộn sau tác vụ đặt int SetWindowRgn ( ); Ðặt vị trí nút cuộn cho thanh cuộn tương ứng. HRGN hRgn, // Handle của region quản lý vùng ấn định UINT SetTimer ( BOOL bRedraw // Vẽ lại cửa sổ (TRUE) hay không (FALSE) UINT nIDEvent, // Số hiệu của timer, phân biệt duy nhất ); Ấn định vùng hiển thị của cửa sổ theo dạng của region. UINT nElapse, // Chu kỳ timer (tính bằng mili-second) void GetWindowText( CString rString ); Lấy nội dung chuỗi tiêu đề // Sử dụng hành vi OnTimer xử lý timer NULL của cửa sổ và lưu vào biến đối tượng chuỗi rString. ); Ðặt biến cố định thời (timer) cho cửa sổ quản lý bởi đối tượng. int GetWindowTextLength( ); Trả về chiều dài của chuỗi tiêu đề. Mỗi khi hết một chu kỳ của timer, hệ thống gửi WM_TIMER kèm void ClientToScreen( LPPOINT lpPoint / LPRECT lpRect ); theo số hiệu của timer đó đến cho cửa sổ. Chuyển tọa độ điểm hay vùng hình chữ nhật trong client của cửa BOOL KillTimer( int nIDEvent ); Hủy bỏ timer có số hiệu nIDEvent. sổ sang hệ trục tọa độ của màn hình. afx_msg void OnTimer( UINT nIDEvent ); Hành vi xử lý WM_TIMER void ScreenToClient( LPPOINT lpPoint / LPRECT lpRect ); của cửa sổ. Tham số nIDEvent chứa số hiệu của timer liên quan. Chuyển tọa độ điểm hay vùng hình chữ nhật trên màn hình sang void Invalidate( BOOL bErase = TRUE ); Kích hoạt cơ chế vẽ lại hệ trục tọa độ của vùng client trong cửa sổ. vùng client của cửa sổ. Nếu bErase = FALSE, windows không thực HICON GetIcon( BOOL bBigIcon ); Trả về handle của icon mà cửa hiện xóa thông tin trong vùng cần vẽ lại. sổ đang sử dụng. Giá trị tham số bBigIcon có ý nghĩa như sau: void InvalidateRect( LPCRECT lpRect, BOOL bErase = TRUE ); TRUE : Handle của icon hiển thị trên taskbar (big Icon) Kích hoạt cơ chế vẽ lại một vùng trong client của cửa sổ. Thông tin FALSE : Handle của icon hiển thị trên caption (small Icon) về vị trí và kích thước của vùng cần vẽ lại được lưu trong biến kiểu HICON SetIcon ( RECT chỉ bởi lpRect. Tham số bErase có ý nghĩa như Invalidate. HICON hIcon, // handle của icon int MessageBox ( BOOL bBigIcon // TRUE (đặt bigIcon) , FALSE (đặt smallIcon) LPCTSTR lpszText, // Nội dung thông báo ); Ðặt icon mới cho cửa sổ. LPCTSTR lpszCaption = NULL // Tiêu đề hộp thông báo static CWnd* PASCAL GetFocus( ); Trả về con trỏ chỉ đến đối UINT nType = MB_OK // Dạng hộp thông báo tượng CWnd đang được phép nhận thông tin nhập từ bàn phím. ); Hiển thị hộp thông báo và trả về số hiệu của nút được chọn. CWnd* SetFocus( ); Kích hoạt cửa sổ. Hàm trả về con trỏ của đối LRESULT SendMessage ( tượng CWnd đã được kích hoạt trước đó. UINT message, // Số hiệu message CFont* GetFont( ); Trả về đối tượng font chữ của cửa sổ. WPARAM wParam = 0, // Tham số kiểu WORD void SetFont ( LPARAM lParam = 0 // và kiểu LONG kèm theo message CFont* pFont, // Con trỏ đến đối tượng font chữ Laäp trình Windows vôùi MFC - Microsoft Visual C++ 6.0 - Leâ Ngoïc Thaïnh - lntmail@yahoo.com Cöûa soå giao dieän vaø lôùp CWnd 44 45
  10. ); Gửi message và tham số kèm theo đến hàm WindowProc của MK_SHIFT : Phím SHIFT được nhấn kèm theo cửa sổ quản lý bởi đối tượng, và chờ đến khi hàm WindowProc xử afx_msg void OnLButtonDown( UINT nFlags, CPoint point ); Hành lý xong. vi xử lý WM_LBUTTONDOWN, message do windows gửi đến cửa BOOL PostMessage( UINT message, sổ khi người dùng ấn nút chuột trái. Các thông tin như trên. WPARAM wParam = 0, LPARAM lParam=0 afx_msg void OnLButtonUp( UINT nFlags, CPoint point ); Hành vi ); Ðặt message và các tham số kèm theo vào message queue của xử lý WM_LBUTTONUP, message do windows gửi đến cửa sổ khi ứng dụng. Hành vi kết thúc mà không chờ message đó được xử lý. người dùng nhả nút chuột trái. Các thông tin như trên. afx_msg void OnSize( UINT nType, int cx, int cy ); Hành vi xử lý Một cách tương tự cho các hành vi xử lý message của nút chuột WM_SIZE, message do windows gửi đến cửa sổ khi một tác vụ phải. thay đổi kích thước cửa sổ hoàn tất. cx, cy chứa kích thước mới của afx_msg void OnMouseMove( UINT nFlags, CPoint point ); Hành c ửa s ổ. vi xử lý WM_MOUSEMOVE, message do windows gửi đến cửa sổ afx_msg int OnCreate( LPCREATESTRUCT lpCreateStruct ); khi người dùng di chuyển chuột trong cửa sổ. Các thông tin như Hành vi xử lý WM_CREATE, message do windows gửi đến cửa sổ trên. khi tác vụ khởi tạo thông số cho cửa sổ được thực hiện xong. int GetDlgCtrlID( ); Trả về số hiệu của đối tượng cửa sổ con. afx_msg void OnClose( ); Hành vi xử lý WM_CLOSE, message do afx_msg void OnPaint( ); Hành vi xử lý WM_PAINT, message do windows gửi đến cửa sổ khi tác vụ đóng cửa sổ đang xảy ra. windows gửi đến cửa sổ khi hệ thống hoặc ứng dụng có nhu cầu afx_msg void OnDestroy( ); Hành vi xử lý WM_DESTROY, trang trí lại một phần hay toàn bộ giao diện của cửa sổ. message do windows gửi đến cửa sổ khi tác vụ hủy bỏ cửa sổ Công việc thông thường của OnPaint là vẽ lại các nội dung cần duy đang xảy ra. trì trên bề mặt giao diện của cửa sổ. Ðể thực hiện việc này, afx_msg void OnKeyDown ( OnPaint sử dụng một đối tượng CDC và dùng nó cho các thao tác UINT nChar, // Mã phím đồ họa cần thiết nhằm hoàn thành yêu cầu nói trên. UINT nRepCnt, // Số lần gõ phím Bố cục xử lý thông thường của hành vi OnPaint như sau: UINT nFlags // Trạng thái các phím kèm theo PAINTSTRUCT ps ; // Biến chứa thông tin trang trí ); Hành vi xử lý WM_KEYDOWN, message do windows gửi đến CDC* pDC = BeginPaint(&ps); // Lấy DC của giao diện cửa sổ cửa sổ khi cửa sổ đang được kích hoạt, đồng thời có phím vừa được . // Xử lý trang trí giao diện đồ họa ấn xuống mà không có sự sử dụng phím Alt kèm theo. EndPaint(&ps); // Chấm dứt. afx_msg void OnKeyUp ( // Các tham số tương tự như trên UINT nChar, UINT nRepCnt , UINT nFlags afx_msg void OnHScroll ( ); Hành vi xử lý WM_KEYUP. Một cách tương tự WM_KEYDOWN. UINT nSBCode, // Số hiệu ghi nhận đặc điểm tác động afx_msg void OnChar ( UINT nPos, // Vị trí nút cuộn / nút trượt trên mục UINT nChar , // Mã ASCII CScrollBar* pScrollBar // Con trỏ đối tượng quản lý mục UINT nRepCnt , // Số lần gõ ); Hành vi xử lý WM_HSCROLL, message do windows gửi đến cửa UINT nFlags // Trạng thái các phím kèm theo sổ khi có một mục là thanh cuộn hay thanh trượt đặt ngang ); Hành vi xử lý WM_CHAR, message do windows gửi đến cửa sổ (horizontal scrollbar hoặc horizontal sliderCtrl) trong cửa sổ bị tác khi một phím ký tự được gõ. động. afx_msg void OnLButtonDblClk ( nSBCode ghi nhận đặc điểm tác động lên nút cuộn / trượt như sau: UINT nFlags, // Chứa giá trị phím được nhấn kèm SB_LEFT : Giảm nút về vị trí thấp nhất CPoint point // Vị trí double-click chuột SB_ENDSCROLL : Chấm dứt tác vụ chuyển nút ); Hành vi xử lý WM_LBUTTONDBLCLK, message do windows gửi SB_LINELEFT : Giảm nút một vị trí đến cửa sổ khi người dùng double-click vào nút chuột trái. SB_LINERIGHT : Tăng nút một vị trí Tham số nFlag có thể là kết hợp của các giá trị sau: SB_PAGELEFT : Giảm nút một đoạn MK_CONTROL : Phím CTRL được nhấn kèm theo Laäp trình Windows vôùi MFC - Microsoft Visual C++ 6.0 - Leâ Ngoïc Thaïnh - lntmail@yahoo.com Cöûa soå giao dieän vaø lôùp CWnd 46 47
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

Đồng bộ tài khoản
2=>2