Hộp thoại và thanh trình đơn

35 384 0
Tài liệu đã được kiểm tra trùng lặp
Hộp thoại và thanh trình đơn

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

NGÔN NGỮ LẬP TRÌNH LẬP TRÌNH C TRÊN WINDOWS Trang 25 Chương 2 HỘP THOẠI THANH TRÌNH ðƠN 2.1. MỞ ðẦU Hộp thoại (dialog) thanh trình ñơn (menu) là các thành phần không thể thiếu trong việc tổ chức giao tiếp giữa người sử dụng chương trình. Hộp thoại ñược xem như là một loại cửa sổ ñặc biệt, là công cụ mềm dẻo, linh hoạt ñể ñưa thông tin vào chương trình một cách dễ dàng. Trong khi menu là công cụ giúp người dùng thực hiện các thao tác ñơn giản hơn, thông qua các nhóm chức năng thường sử dụng. 2.2. HỘP THOẠI Hộp thoại phối hợp giữa người sử dụng với chương trình bằng một số phần tử ñiều khiển mà các phần tử này nhận nhiệm vụ thu nhận thông tin từ người dùng cung cấp thông tin ñến người dùng khi người dùng tác ñộng ñến các phần tử ñiều khiển. Các phần tử ñiều khiển này nhận cửa sổ cha là một hộp thoại. Các phần tử ñiều khiển thường là các Button, List Box, Combo Box, Check Box, Radio Button, Edit Box, Scroll Bar, Static. Tương tự như các thông ñiệp gởi ñến thủ tục WndProc của cửa sổ chính.Windows sẽ gởi các thông ñiệp xử lý hộp thoại ñến thủ tục xử lý hộp thoại DlgProc. Hai thủ tục WndProc thủ tục DlgProc tuy cách làm việc giống nhau nhưng giữa chúng có những ñiểm khác biệt cần lưu ý. Bên trong thủ tục xử lý hộp thoại bạn cần khởi tạo các phần tử ñiều khiển bên trong hộp thoại bằng thông ñiệp WM_INITDIALOG, cuối cùng là ñóng hộp thoại, còn thủ tục xử lý WndProc thì không có. Có ba loại hộp thoại cơ bản. Hộp thoại trạng thái (modal), hộp thoại không trạng thái (modeless) hộp thoại thông dụng (common dialog) mà chúng ta sẽ ñề cập cụ thể trong các phần dưới. 2.2.1. Hộp thoại trạng thái Hộp thoại trạng thái (modal) là loại hộp thoại thường dùng trong các ứng dụng của chúng ta. Khi hộp thoại trạng thái ñược hiển thị thì bạn không thể chuyển ñiều khiển ñến các cửa sổ khác, ñiều này có nghĩa bạn phải ñóng hộp thoại hiện hành trước khi muốn chuyển ñiều khiển ñến các cửa sổ khác. 2.2.1.1. Cách tạo hộp thoại ñơn giản Sau ñây là chương trình tạo ra một hộp thoại ñơn giản. Hộp thoại ñược tạo ra có nội dung như sau. Khi hộp thoại hiện lên có xuất hiện dòng chữ "HELLO WORLD", bên trên hộp thoại có một biểu tượng của hộp thoại ñó là một icon, phía dưới hộp thoại là một nút bấm (Button) có tên là OK, khi nhấp chuột vào nút OK thì hộp thoại "HELLO WORLD" ñược ñóng lại. Tech24.vn NGÔN NGỮ LẬP TRÌNH LẬP TRÌNH C TRÊN WINDOWS Trang 26 Hình 2.1 Hộp thoại ñơn giản ðoạn code chương trình như sau (Ví dụ 2.1): DIALOG.CPP (trích dẫn) LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM); BOOL CALLBACK DialogProc (HWND, UINT, WPARAM, LPARAM) ; LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { static HINSTANCE hInstance ; switch (message) { case WM_CREATE : hInstance = ((LPCREATESTRUCT) lParam)->hInstance ; return 0 ; case WM_COMMAND : switch (LOWORD (wParam)) { case IDC_SHOW : DialogBox (hInstance, TEXT ("DIALOG1"), hwnd, DialogProc) ; break; Tech24.vn NGÔN NGỮ LẬP TRÌNH LẬP TRÌNH C TRÊN WINDOWS Trang 27 } return 0 ; case WM_DESTROY : PostQuitMessage (0) ; return 0 ; } return DefWindowProc (hwnd, message, wParam, lParam) ; } /*----------------------hàm xử lý thông ñiệp hộp thoại-------------------------------*/ BOOL CALLBACK DialogProc (HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) { switch (message) { case WM_INITDIALOG : return TRUE ; case WM_COMMAND : switch (LOWORD (wParam)) { case IDOK : EndDialog (hDlg, 0) ; return TRUE ; } break ; } return FALSE ; } Tech24.vn NGÔN NGỮ LẬP TRÌNH LẬP TRÌNH C TRÊN WINDOWS Trang 28 DIALOG1.RC (trích dẫn) /*---------------------------------------dialog--------------------------------------------*/ DIALOG1 DIALOG DISCARDABLE 40, 20, 164, 89 STYLE DS_MODALFRAME | WS_POPUP FONT 9, "MS Sans Serif" BEGIN DEFPUSHBUTTON "OK",IDOK,54,65,50,14 CTEXT "HELLO WORLD ",IDC_STATIC,53,38,72,10 ICON IDI_ICON1,IDC_STATIC,68,9,20,20 END /* -----------------------------------------Menu------------------------------------------*/ MENU1 MENU DISCARDABLE BEGIN POPUP "Dialog1" BEGIN MENUITEM "&Show", IDC_SHOW END END 2.2.1.2. Hộp thoại tạo mẫu template cho hộp thoại Trong ví dụ 2.1 ở trên, ta ñã tạo hộp thoại bằng cách dùng các câu lệnh chứa trong file tài nguyên DIALOG1.RC. Cách làm này giúp ta hiểu cấu trúc lệnh của Windows, tuy nhiên công cự Visual C++ Developer Studio, ta có thể thiết lập một hộp thoại trực quan hơn như sau : Chọn Insert từ thực ñơn Resource View ñể thêm một hộp thoại, màn hình ñược thể hiện như trong hình 2.2. Miscrosoft sẽ hiển thị hộp thoại trực quan cùng với thanh công cụ ñể bạn có thể thêm các thành phần ñiểu khiển vào hộp thoại. Chúng ta có thể ñiều chỉnh các thuộc tính của hộp thoại như tên hộp thoại, ID hộp thoại, ví trí hiển thị của hộp thoại trên cửa sổ chính, kích thước chữ kiểu chữ thể hiện trên hộp thoại .vv bằng cách nhấn chuột phải trên hộp thoại thì cửa sổ Properties của hộp thoại ñược hiển thị (hình 2.3). Tech24.vn NGÔN NGỮ LẬP TRÌNH LẬP TRÌNH C TRÊN WINDOWS Trang 29 Hình 2.2 Thêm một Dialog trong Resource View Hình 2.3 Hộp thoại Properties của Dialog Trong cửa sổ Properties này chọn tab Styles, bỏ mục chọn Title Bar không cần tạo tiêu ñề cho cửa sổ. Sau ñó ñóng cửa sổ Properties của hộp thoại lại. Bây giờ bắt ñầu thiết kế diện mạo cho hộp thoại. Xóa nút Cancel vì không cần ñến nút này. ðể thêm một biểu tượng vào hộp thoại ta nhấn nút Picture lên thanh công cụ kích chuột vào hộp thoại rồi kéo khung chữ nhật theo kích thước mong muốn. ðây là nơi mà biểu tượng ñược hiển thị. Nhấn chuột phải vào khung chữ nhật vừa tạo, chọn Properties từ trình ñơn xuất hiện ñể nguyên ñịnh danh của biểu tượng là IDC_STATIC. ðịnh danh này sẽ ñược Windowns tự khai báo trong file Resource.h với giá trị -1. Giá trị -1 là giá trị của tất cả các ñịnh danh mà chương trình không cần tham chiếu ñến. Tiếp ñến là chọn ñối tượng Icon trong trong mục Type, rồi gõ ñịnh danh của Icon cần thêm vào trong mục Image. Nếu ñã tạo ra biểu tượng Icon trước thì chỉ việc chọn Icon từ danh sách các Icon trong mục Image. ðể thêm dòng chữ "HELLO WORLD" vào hộp thoại, chọn Static Text từ bảng công cụ ñặt ñối tượng vào hộp thoại. Nhấn chuột phải ñể hiện thị Properties của Static Text, sau ñó vào mục caption ñánh dòng chữ "HELLO WORD" vào ñây. Dịch chạy chương trình sau ñó xem file DIALOG1.RC dưới dạng text, nội dung hộp thoại ñược Windows phát sinh như sau : DIALOG1 DIALOG DISCARDABLE 40, 20, 164, 90 Tech24.vn NGÔN NGỮ LẬP TRÌNH LẬP TRÌNH C TRÊN WINDOWS Trang 30 STYLE DS_MODALFRAME | WS_POPUP FONT 9, "MS Sans Serif" BEGIN DEFPUSHBUTTON "OK",IDOK,54,65,50,14 CTEXT "HELLO WORLD ",IDC_STATIC,53,38,72,10 ICON IDI_ICON1,IDC_STATIC,68,9,21,20 END Dòng ñầu tiên là tên của hộp thoại "DIALOG1" kế tiếp là từ khóa DIALOG, DISCARDABLE tiếp sau ñó là 4 số nguyên. Hai số nguyên ñầu tiên chỉ vị trí dòng, cột của hộp thoại sẽ ñược hiển thị trên cửa sổ chính. Hai số nguyên tiếp theo xác ñịnh kích thước của hộp thoại theo thứ tự cột dòng. Lưu ý : Các thông số ñịnh tọa ñộ kích thước của hộp thoại không tính theo ñơn vị Pixel mà tính theo kích cở của Font chữ. Số ño của tọa ñộ x chiều rộng dựa trên 1/4 ñơn vị rộng trung bình của Font chữ. Số ño của tọa ñộ y chiều cao dựa trên 1/8 ñơn vị cao trung bình của Font chữ. Theo sau lệnh STYLE là các thuộc tính của hộp thoại mà bạn cần thêm vào. Thông thường hộp thoại modal sử dụng các hằng WS_POPUP DS_MODALFRAME ngoài ra còn có các hằng WS_CAPTION, WS_MAXIMIZEBOX, WS_MINIMIZEBOX, WS_POPUP, WS_VSCROLL, WS_HSCROLL, WS_SYSMENU, Lệnh BEGIN lệnh END có thể ñược thay bằng { }. Trong ví dụ trên, hộp thoại sử dụng 3 kiểu ñiều khiển là DEFPUSHBUTTON (kiểu nút bấm mặc ñịnh), ICON (biểu tượng), kiểu CTEXT (văn bản ñược canh giữa). Một kiểu ñiều khiển ñược khai báo tổng quát như sau. Control-type "text", id , xPos, yPos, xWidth, yHeight, iStyle. Control-type là các từ khóa khai báo kiểu ñiều khiển như DEFPUSHBUTTON, ICON, CTEXT, …. id là ñịnh danh của các ñiều khiển, thông thường một ñiều khiển có một ñịnh danh riêng ñược gởi cùng với thông ñiệp WM_COMMAND ñến các thủ tục xử lý thông ñiệp của cửa sổ cha. xPos, yPos là vị trí cột, dòng hiểm thị của ñiều khiển ñó trên cửa sổ cha. xWidth, yHeight là chiều rộng chiều cao của ñiều khiển ñó. ðối số cuối cùng là iStyle, ñối số này tùy chọn dùng ñể ñịnh nghĩa thêm các kiểu cửa sổ mà ñiều khiển cần thể hiện chúng thường là các hằng WS_ ñược khai báo trong tập tin “.h" của Windows. 2.2.1.3. Thủ tục xử lý thông ñiệp của hộp thoại Thủ tục xử lý thông ñiệp của hộp thoại dùng ñể xử lý tất cả các thông ñiệp từ bộ quản lý hộp thoại của Windows gởi ñến hôp thoại. Thủ tục này ñược Windows gọi khi có sự tác ñộng lên các phần tử ñiểu khiển nằm trong hộp thoại. Tech24.vn NGÔN NGỮ LẬP TRÌNH LẬP TRÌNH C TRÊN WINDOWS Trang 31 Xét thủ tục xử lý hộp thoại DialogProc trong ví dụ 2.1. Thủ tục này có 4 tham số như thủ tục WndProc, thủ tục này ñược ñịnh nghĩa kiểu trả về là CALLBACK.Tuy hai thủ tục này tương tự giống nhau nhưng thực sự giữa chúng có một vài sự khác biệt ñáng chú ý.  Thủ tục DialogProc trả về giá trị kiểu BOOL, trong khi thủ tục WindProc thì trả về giá trị LRESULT.  Thủ tục DialogProc trả về giá trị TRUE (giá trị khác 0) nếu nó xử lý thông ñiệp ngược lại nếu không xử lý các thông ñiệp thì thủ tục trả về giá thị là FALSE (trị 0). Còn thủ tục WindProc thì gọi hàm DefWindowProc với các thông ñiệp không cần xử lý.  Thủ tục DialogProc không cần xử lý thông ñiệp WM_DESTROY, cũng không cần xử lý thông ñiệp WM_PAINT cũng không nhận ñược thông ñiệp WM_CREATE mà là thông ñiệp WM_INITDIALOG dùng ñể khởi tạo hộp thoại. Ngoài xử lý thông ñiệp WM_INITDIALOG, thủ tục xử lý thông ñiệp hộp thoại chỉ xử lý một thông ñiệp duy nhất khác là WM_COMMAND. ðây cũng là thông ñiệp ñược gởi ñến cửa sổ cha khi ta kích hoạt (nút nhấn ñang nhận ñược focus) lên các thành phần ñiểu khiển. Chỉ danh ID của nút “OK" là IDOK sẽ ñược chứa trong word thấp của ñối số wParam. Khi nút này ñược nhấn, thủ tục DialogProc gọi hàm EndDialog ñể kết thúc xử lý ñóng hộp thoại. Các thông ñiệp gửi ñến hộp thoại không ñi qua hàng ñợi mà nó ñược Windows gọi trực tiếp hàm DialogProc ñể truyền các thông ñiệp vào cho thủ tục xử lý hộp thoại.Vì vậy, không phải bận tâm về hiệu ứng của các phím tắt ñược quy ñịnh trong chương trình chính. 2.2.1.4. Gọi hiển thị hộp thoại các vấn ñề liên quan Trong thủ tục WndProc khi xử lý thông ñiệp WM_CREATE Windows lấy về ñịnh danh hInstance của chương trình lưu nó trong biến tĩnh hInstance như sau. hInstance = ((LPCREATESTRUCT) lParam)->hInstance; Dialog1 kiểm tra thông ñiệp WM_COMMAND xem word thấp của ñối số wParam có bằng giá trị IDC_SHOW (chỉ danh của thành phần Show trong thực ñơn). Nếu phải, tức ñã chọn mục Show trên trình ñơn của cửa sổ chính yêu cầu hiển thị hộp thoại, lúc này chương trình gọi hiển thị hộp thoại bằng cách gọi hàm. DialogBox (hInstance, TEXT ("DIALOG1"), hwnd, DialogProc) ðối số ñầu tiên của hàm này phải là hInstance của chương trình gọi, ñối số thứ hai là tên của hộp thoại cần hiển thị, ñối số thứ 3 là cửa sổ cha mà hộp thoại thuộc về, cuối cùng là ñịa chỉ của thủ tục xử lý các thông ñiệp của hộp thoại. Chương trình không thể trả ñiều khiển về hàm WndProc cho ñến khi hộp thoại ñược ñóng lại. Giá trị trả về của hàm DialogBox là giá trị của ñối số thứ hai trong hàm EndDialog nằm bên trong thủ tục xử lý thông ñiệp hộp thoại. Tuy nhiên chúng ta cũng có thể gởi thông ñiệp ñến hàm WndProc yêu cầu xử lý ngay cả khi hộp thoại ñang mở nhờ hàm SendMessage như sau : SendMessage(GetParent(hDlg), message, wParam, lParam) Tech24.vn NGÔN NGỮ LẬP TRÌNH LẬP TRÌNH C TRÊN WINDOWS Trang 32 Tuy Visual C++ Developer ñã cung cấp cho chúng ta bộ soạn thảo hộp thoại trực quan mà ta không cần phải quan tâm ñến nội dung trong tập tin .RC. Tuy nhiên với cách thiết kế một hộp thoại bằng các câu lệnh giúp chúng ta hiểu chi tiết hơn cấu trúc lệnh của Windows hơn thế nữa tập lệnh dùng ñể thiết kế hộp thoại phong phú ña dạng hơn rất nhiều so với những gì mà ta trực quan ñược trên bộ soạn thảo của Developer. Bằng cách sử dụng các lệnh ñặc biệt trong tập tin Resource editor của Visual C++ ta có thể tạo ra nhiều ñối tượng mà trong bộ soạn thảo không có. Thêm hằng WS_THINKFRAME vào mục STYLE ñể co giản hộp thoại (tương ñương với trong boder ta chọn mục Resizing). ðể ñặt nội dung tiêu ñề cho hộp thoại ta chỉ việc thêm hằng WS_CAPTION trong STYLE. STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION CAPTION "Hello Dialog1" Có thể dùng cách khác ñể thêm tiêu ñề cho hộp thoại, bằng cách trong khi xử lý thông ñiệp WM_INITDIALOG thêm vào dòng lệnh: SetWindowText(hDlg,TEXT("Hello Dialog")); Khi hộp thoại có tiêu ñề rồi, có thể thêm các chức năng phóng to thu nhỏ hộp thoại bằng hằng WS_MINIMIZEBOX, WS_MAXIMIZEBOX. Có thể thêm trình ñơn vào hộp thoại nếu muốn bằng ñoạn lệnh. DIALOG1 DIALOG DISCARDABLE 40, 20, 164, 90 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION CAPTION "Hello Dialog1" MENU MENU1 Trong ñó MENU1 là tên của trình ñơn ta ñã tạo. Trong Visual C++ Developer ta chỉ cần chọn tên thực ñơn trong mục Menu như hình sau. Tech24.vn NGÔN NGỮ LẬP TRÌNH LẬP TRÌNH C TRÊN WINDOWS Trang 33 Hình 2.4 Chọn menu trong Dialog Propertier Từ cửa sổ Properties trên thể chọn mục "Font" ñể ñịnh Font chữ cho hộp thoại. Gọi hàm DialogBoxIndirect ñể tạo ra một hộp thoại mà không cần dùng resource script. Hộp thoại tạo ra bằng hàm này trong khi chương trình ñang thực hiện ñược gọi là hộp thoại tạo tự ñộng. Trong ví dụ 3-1 ta chỉ dùng 3 kiểu ñiều khiển ñó là các kiểu ‘ICON’, ‘CTEXT’, ‘DEFPUSHBUTTON’. Ngoài ra còn có các kiểu ñiều khiển ñược liệt kê trong bảng sau. Kiểu ñiều khiển Lớp cửa sổ Kiểu cửa sổ PUSHBUTTON Button BS_BUSHBUTTON DEFPUSHBUTTON Button BS_DEFBUSHBUTTON | WS_TABSTOP CHECKBOX Button BS_CHECKBOX | WS_TABSTOP RADIOBUTTON Button BS_RADIOBUTTON | WS_TABSTOP GROUPBOX Button BS_GROUPBOX | WS_TABSTOP LTEXT Static SS_LEFT | WS_GROUP CTEXT Static SS_CENTER | WS_GROUP RTEXT Static SS_RIGHT | WS_GROUP ICON Static SS_ICON EDITTEXT Edit ES_LEFT | WS_BORDER | WS_STABSTOP SCROLLBAR Scrollbar SBS_HORZ LISTBOX Listbox LBS_NOTIFY | WS_BORDER | WS_VSCROLL COMBOBOX Combobox CBS_SIMPLE | WS_TABSTOP Bảng 2.1 Các kiểu ñiều khiển Các kiểu ñiều khiển ñược khai báo trong resource script có dạng như sau, ngoại trừ kiểu ñiều khiển LISTBOX, COMBOBOX, SCROLLBAR, EDITTEXT. Control-type "text", id, xPos, yPos, xWidth, yHeight, iStyle Các kiểu ñiều khiển LISTBOX, COMBOBOX, SCROLLBAR, EDITTEXT ñược khai báo trong resource script với cấu trúc như trên nhưng không có trường "text". Tech24.vn NGÔN NGỮ LẬP TRÌNH LẬP TRÌNH C TRÊN WINDOWS Trang 34 Thêm thuộc tính cho các kiểu ñiều khiển bằng cách thay ñổi tham số iStyle. Ví dụ ta muốn tạo radio button với chuỗi diễn ñạt nằm ở bên trái của nút thì ta gán trường iStyle bằng BS_LEFTTEXT cụ thể như sau. RADIOBUTTON Radio1",IDC_RADIO1,106,10,53,15,BS_LEFTTEXT Trong resource script ta cũng có thể tạo một kiểu ñiểu khiển bằng lệnh tổng quát sau. CONTROL "text", id, "class", iStyle, xPos, yPos, xWidth, yHeight Trong ñó class là tên lớp muốn tạo ví dụ thay vì tạo một radio button bằng câu lệnh. RADIOBUTTON "Radio1",IDC_RADIO1,106,10,53,15,BS_LEFTTEXT Thay bằng ñoạn lệnh sau: CONTROL"Radio1",IDC_RADIO1,"button",106,10,53,15,BS_LEFTTEXT 2.2.1.5. Ví dụ chương trình về hộp thoại. ðể minh họa cho việc trao ñổi thông ñiệp giữa các thành phần ñiều khiển bên trong hộp thoại (ñóng vai trò là một cửa sồ cha) với các thành phần ñiều khiển con nằm bên trong hộp thoại, cơ chế quản lý hộp thoại của Windows. Chúng ta tiến hành xem xét ví dụ 2-2. Kết quả thực hiện của chương trình như trong hình 2.5. Cửa sổ hộp thoại gồm có ba nhóm nút chọn radio.Nhóm thứ nhất dùng ñể chọn ñối tượng vẽ là hình chữ nhật hay hình ellipse, nhóm thứ hai dùng ñể chọn màu tô cho hình vẽ, nhóm thứ 3 dùng ñể chọn kiểu tô cho hình vẽ. Khi thay ñổi việc chọn màu tô, kiểu tô thì màu tô kiểu tô của hình vẽ cạnh bên sẽ thay ñổi theo màu tô, kiểu tô vừa mới chọn. Khi nhấn nút OK thì hộp thoại ñóng lại màu tô, kiểu tô cùng hình vẽ vừa mới vẽ sẽ ñược hiển thị lên cửa sổ chính. Nếu nhấn nút Cancel hoặc nhấn phím Esc thì hộp thoại ñược ñóng lại nhưng hình vẽ, màu tô kiểu tô không ñược hiển thị lên cửa sổ chính. Trong ví dụ này nút OK nút Cancel có chỉ danh ID lần lượt là IDOK IDCANCEL.Thông thường ñặt chỉ danh cho các phần tử ñiều khiển nằm trong hộp thoại ñược bắt ñầu bằng chữ ID. Biểu tượng chiếc xe ñạp trên hộp thoại ñó là một icon. Trên thanh tiêu ñề của cửa sổ chính có một biểu tượng, biểu tượng ñó cũng là một icon (ñó là một ly trà). Khi ñặt các nút radio vào hộp thoại bằng công cụ Developer studio nhớ phải ñặt các nút ñó theo thứ tự như hình 2-5. Thì khi ñó Windows mới phát sinh mã cho các nút ñó theo thứ tự tăng dần, ñiều này giúp chúng ta dễ dàng kiểm soát các thao tác trên tập các nút radio. Bạn nhớ bỏ luôn mục chọn Auto trong phần thiết lập Properties của các nút chọn radio. Bởi vì các nút radio mang thuộc tính Auto yêu cầu viết ít mã lệnh hơn ngưng chúng thường khó hiểu so với các nút không có thuộc tính Auto. Chọn thuộc tính Group, Tab stop trong phần thiết kế Properties của nút OK, nút Cancel, hai nút radio ñầu tiên trong ba nhóm radio ñể có thể chuyển focus (chọn) bằng phím Tab trên bàn phím. Tech24.vn [...]... không th thi u là menu c a chương trình Menu xu t hi n ngay dư i thanh tiêu ñ c a chương trình ng d ng Ngoài ra trong m t s ng d ng thanh menu có th di chuy n ñư c Te Th t ra menu cũng khá ñơn gi n, vì chúng ñư c t ch c thành các nhóm trên thanh chính (File, Edit, View,…), m i m c li t kê trong menu chính có th ch a m t hay nhi u m c li t kê g i là menu popup hay dropdown, v i m i m c li t kê trong menu... TRÌNH L P TRÌNH C TRÊN WINDOWS break; Có nghĩa n u hàm DialogBox tr v giá tr TRUE, t c nút OK ñư c nh n Lúc ñó th t c WndProc s c p nh t l i n i dung c a c a s chính, b ng cách ghi l i s thay ñ i giá tr c a hai bi n toàn c c iCurrentColor giá tr iCurrentFigure dùng ñ v l i hình ch nh t hay hình ellipse v i màu ñư c ch n là iCurrentColor ngư c l i n u nh n nút Cancel thì giá tr iCurrentColor và. .. tho i thì hàm IsDialogMessage ki m tra g i ñ n các th t c x lý h p tho i lúc này hàm tr v giá tr TRUE, còn ngư c l i thì hàm tr v giá tr FALSE N u dùng thêm ch c năng phím tăng t c thì ño n chương trình trên ñư c vi t l i như sau while(GetMessage(&msg, NULL, 0, 0)) { if (hDlgModeless==0 || !IsDialogMessage(hDlgModeless, &msg); Trang 46 NGÔN NG L P TRÌNH L P TRÌNH C TRÊN WINDOWS { if(TranslateAccelerator... ch n lo i hình v trên radio button, lo i hình v ñư c ch n s v cùng lúc lên control tĩnh c a h p tho i c a s chính Dùng chu t ñ ch n màu tô cho hình v ñư c ch n, b ng cách rê chu t lên 3 thanh cu n Scrollbar Chương trình minh h a (Ví d 2.3) : *MODELESS.CPP (trích d n) Trang 47 NGÔN NG L P TRÌNH L P TRÌNH C TRÊN WINDOWS void PaintWindow (HWND hwnd, int iColor[], int iFigure) { HBRUSH hBrush ; HDC hdc... ñ l y handle c a nút ñư c ch n lưu vào bi n i Hàm SendMessage dùng ñ g i thông ñi p MB_SETCHECK t i các nút radio N u word th p c a ñ i s wParam b ng ch danh ID c a nút ñư c ch n thì nút ñó ñư c ñánh d u các nút khác s không ñư c ch n Chú ý :Trong các ví d trên thư ng dùng hai nút OK nút Cancel, hai nút này ñư c Windows ñ t ñ nh danh m c ñ nh theo th t là IDOK IDCANCEL Thông thư ng ñóng... xám, khi ñó ngư i dùng s bi t r ng m c li t kê ñó không có hi u l c 2.3.1 Thi t l p Menu ð t o m t menu ñưa vào chương trình bao g m các bư c sau: *T o menu trong t p tin tài nguyên *.RC: ð t o menu trong t p tin tài nguyên, thư ng có 2 cách chính là: dùng m t trình so n th o ñ m t p tin tài nguyên so n th o theo c u trúc t p tin RC cung c p cho tài nguyên menu Thông thư ng, cách này ít s d ng,... o menu m t cách d dàng Trang 52 NGÔN NG L P TRÌNH L P TRÌNH C TRÊN WINDOWS *Cài ñ t menu vào c a s c a chương trình ng d ng: ph n này ñơn gi n là khi ñ nh nghĩa l p c a s ta thi t l p thu c tính lpszMenuName c a c u trúc l p WNDCLASS b ng tên menu ñư c khai báo trong t p tin tài nguyên Ví d : wndclass.lpszMenuName = "MENU1"; Ngoài ra, có th cài ñ t menu vào c a s b ng cách dùng l nh : hMenu = LoadMenu... g i hàm t o c a s CreateWindow, tham s th 9 ñư c thi t l p NULL, sau ñó trong chương trình dùng l nh: SetMenu(hWnd, hMenu); ñ thi t l p menu cho c a s Te ch 2 *Thêm các ño n chương trình x lý menu: Windows phát sinh thông ñi p WM_COMMAND g i ñ n chương trình khi ngư i dùng ch n m t m c li t kê có hi u l c trên thanh menu Khi ñó ch c n x lý thông ñi p WM_COMMAND b ng cách ki m tra 16 bit th p c... t kê trên menu có 3 d ng: có hi u l c (enabled), không có hi u l c (disabled), màu xám (grayed) V i quan ñi m l p trình thì ta ch c n hai tr ng thái là có hi u l c không có hi u l c mà thôi, do ñó tr ng thái màu xám s ch cho ngư i dùng bi t là tr ng thái c a m c li t kê có hi u l c hay không Vì v y khi vi t chương trình nh ng m c nào không có hi u l c thì ta thi t l p tr ng thái màu xám, khi... thông ñi p WM_COMMAND v i thành ph n LOWORD c a ñ i s wParam có giá tr Trang 42 NGÔN NG L P TRÌNH L P TRÌNH C TRÊN WINDOWS IDCANCEL (ñ nh danh m c ñ nh c a nút Cancel) Do ñó không c n ph i x lý thêm các phím gõ ñ ñóng h p tho i Trong ví d 2.2 ñ x lý hai trư ng h p khi nh n nút Cancel nút OK ta dùng ño n chương trình sau switch (LOWORD (wParam)) { case IDOK: iCurrentColor = iColor ; iCurrentFigure = . NGÔN NGỮ LẬP TRÌNH LẬP TRÌNH C TRÊN WINDOWS Trang 25 Chương 2 HỘP THOẠI VÀ THANH TRÌNH ðƠN 2.1. MỞ ðẦU Hộp thoại (dialog) và thanh trình ñơn (menu). tính của hộp thoại như tên hộp thoại, ID hộp thoại, ví trí hiển thị của hộp thoại trên cửa sổ chính, kích thước chữ và kiểu chữ thể hiện trên hộp thoại. vv

Ngày đăng: 02/10/2013, 20:20

Hình ảnh liên quan

Hình 2.1 Hộp thoại ñơn giản - Hộp thoại và thanh trình đơn

Hình 2.1.

Hộp thoại ñơn giản Xem tại trang 2 của tài liệu.
Hình 2.2 Thêm một Dialog trong Resource View - Hộp thoại và thanh trình đơn

Hình 2.2.

Thêm một Dialog trong Resource View Xem tại trang 5 của tài liệu.
Hình 2.3 Hộp thoại Properties của Dialog - Hộp thoại và thanh trình đơn

Hình 2.3.

Hộp thoại Properties của Dialog Xem tại trang 5 của tài liệu.
Hình 2.4 Chọn menu trong Dialog Propertier - Hộp thoại và thanh trình đơn

Hình 2.4.

Chọn menu trong Dialog Propertier Xem tại trang 9 của tài liệu.
Hình 2.5 Minh họa trao ñổi thông ñiệp qua các ñiều khiển Chương trình minh họa (Ví dụ 2.2) :  - Hộp thoại và thanh trình đơn

Hình 2.5.

Minh họa trao ñổi thông ñiệp qua các ñiều khiển Chương trình minh họa (Ví dụ 2.2) : Xem tại trang 11 của tài liệu.
Hình 2.6 Minh họa hộp thoại không trạng thái - Hộp thoại và thanh trình đơn

Hình 2.6.

Minh họa hộp thoại không trạng thái Xem tại trang 23 của tài liệu.

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan