text:
Các đối tượng điều khiển
Chia sẻ: Danh Ngoc | Ngày: | Loại File: PDF | Số trang:41
lượt xem 24
download
Các đối tượng điều khiển
CÁC ĐỐI TƯỢNG ĐIỀU KHIỂN Các đối tượng điều khiển (control) là các thành phần tương tác trực quan, thể hiện rõ cơ chế giao tiếp đồ họa giữa ứng dụng và người dùng. Nhờ các đối tượng này, các chương trình ứng dụng trong Windows trở nên thân thiện và dễ dùng. Ví thế, chúng là các thành phần cơ bản không thể thiếu trong hầu hết các ứng dụng. Trong chương này, chúng ta sẽ tìm hiểu các tạo lập và xử lý cho các đối tượng điều khiển thông qua các lớp (class) sau : · Lớp Button...
Bình luận(0) Đăng nhập để gửi bình luận!
Nội dung Text: Các đối tượng điều khiển
- CÁC ĐỐI TƯỢNG ĐIỀU KHIỂN Các đối tượng điều khiển (control) là các thành phần tương tác trực quan, thể hiện rõ cơ chế giao tiếp đồ họa giữa ứng dụng và người dùng. Nhờ các đối tượng này, các chương trình ứng dụng trong Windows trở nên thân thiện và dễ dùng. Ví thế, chúng là các thành phần cơ bản không thể thiếu trong hầu hết các ứng dụng. Trong chương này, chúng ta sẽ tìm hiểu các tạo lập và xử lý cho các đối tượng điều khiển thông qua các lớp (class) sau : · Lớp Button (nút bấm). · Lớp Static (tĩnh). · Lớp Edit Box (soạn thảo). · Lớp List Box (danh sách). · Lớp Combo Box. · Lớp Scroll Bar (thanh cuộn). GIỚI THIỆU TỔNG QUAN Một kiểu điều khiển được xem như là một cửa sổ con. Có thể tạo nhiều cửa sổ con trong cùng một cửa sổ cha. Các cửa sổ con xác định handle cửa sổ của cha bằng cách gọi hàm : hwndParent = GetParent (hwnd); hwnd là handle của cửa sổ con cần lấy handle của cửa sổ cha. Và khi đã lấy được handle của cửa sổ cha, cửa sổ con có quyền gởi các thông điệp đến cửa sổ cha thông qua hàm. SendMessage(hwndParent, message, wParam, lParam); message là thông điệp cần gởi đến thủ tục xử lý của cửa sổ cha. wParam là chỉ danh ID của cửa sổ con, còn lParam ghi lại trạng thái của cửa sổ con. Vậy chúng ta có thể tạo một thành phần điều khiển dạng cửa sổ con hay còn gọi là "child window control". Cửa sổ con có nhiệm vụ xử lý các thông điệp như bàn
- phím, thông điệp chuột và thông báo cho cửa sổ cha khi trạng thái của cửa sổ con thay đổi. Như vậy cửa sổ con trở thành công cụ giao tiếp (cho phép nhập và xuất) giữa người dùng với chương trình. Tuy chúng ta có thể tạo ra một cửa sổ con cho chính mình, nhưng chúng ta nên tận dụng các lớp cửa sổ con đã được Windows định nghĩa sẵn hay còn gọi là những kiểu điều khiển chuẩn. Những kiểu điều khiển chuẩn này thường là các nút bấm (button), hộp kiểm tra (check box), hộp soạn thảo (edit box), hộp danh sách (list box), combo box, các thanh cuộn và chuỗi chữ. Ví dụ muốn tạo ra một nút bấm ở trên màn hình chỉ cần gọi hàm CreateWindows, mà chẳng cần phải quan tâm đến cách vẽ, cách nhận chuột hay là chớp khi bị kích hoạt. Tất cả điều này đều do Windows xử lý. Điều quan trọng làphải chặn thông điệp WM_COMMAND của các điều khiển để xử lý thông điệp này theo những mục đích khác nhau. Các kiểu điều khiển con thường được dùng trong hộp thoại. Như đã minh họa trong chương 2, ở đó các điều khiển nhận hộp thoại làm cửa sổ cha. Tuy nhiên, cũng có thể tạo các kiểu điều khiển con trực tiếp trên vùng cửa sổ chính, bằng cách gọi hàm CreateWindow và điều chỉnh vị trí cùng với kích thước của nó cho thích hợp bằng hàm MoveWindow. Thủ tục xử lý thông điệp của cửa sổ cha gửi các thông điệp đến các khiểu điều khiển con, và ngược lại các child window control gởi các thông điệp để yêu cầu cửa sổ cha xử lý các thông điệp đó. Để tạo một cửa sổ ứng dụng bình thường. Đầu tiên phải đăng ký lớp cửa sổ bằng hàm RegisterClass. Tiếp theo là khởi tạo lớp đã đăng ký thông qua hàm CreateWindow. Còn trường hợp muốn tạo một lớp đã được định nghĩa sẵn thì không cần đăng ký cho lớp cửa sổ con muốn tạo. Sử dụng các kiểu điều khiển trực tiếp trên cửa sổ chính đòi hỏi các tác vụ cấp thấp hơn so với dùng các kiểu điều khiển trên hộp thoại. Và các kiểu điều khiển tạo ra trên cửa sổ chính không có hỗ trợ các tiện ích. Ví dụ như chúng ta không thể sử dụng phím bấm tab để chuyển focus giữa các kiểu điều khiển với nhau. LỚP BUTTON Để tìm hiểu các kiểu điều khiển, xem xét ví dụ 3.1 sau. Trong ví dụ này đã tạo ra 9 cửa sổ con chuẩn trên một cửa sổ cha như hình 3.1. Nhấp chuột vào các nút, lúc đó các nút sẽ gởi thông điệp WM_COMMAND đến thủ tục xử lý thông điệp WndProc của cửa sổ cha. Thủ tục WndProc xử lý và in ra màn hình các thông số lParam và wParam của thông điệp gởi tới này.Trong đó lParam là handle của cửa sổ con gởi thông điệp đến cửa sổ cha. wParam có hai phần LOWORD và HIWORD, LOWORD cho biết ID của cửa sổ con, HIWORD là mã thông báo. Mã thông báo nút bấm là một trong những giá trị sau.
- Định danh mã thông báo Button Giá trị BN_CLICKED 0 BN_PAINT 1 BN_HILETE hay BN_PUSHED 2 BN_UNHILITE hay 3 BN_UNPHUSHED BN_DISABLE 4 BN_DOUBLECLICKED hay 5 BN_DBCLICK BN_SETFOCUS 6 BN_KILLFOCUS 7 Bảng Định danh mã thông báo Button Không bao giờ thấy được các giá trị của nút bấm, chỉ biết rằng giá trị từ 1 đến 4 dành cho kiểu button BS_USERBUTTON, giá trị 5 dành cho kiểu BS_RADIOBUTTON, BS_AUTORADIOBUTTON, BS_OWNEDRAW, hay các nút bấm khác nếu nút bấm đó bao gồm kiểu BS_NOTYFY. Giá trị 5,6 dành cho các kiểu nút bấm bao gồm cả cờ NOTYFY. Sau đây là chương trình chính. v CONTROL1.CPP (trích dẫn) struct { int iStyle ; TCHAR *szText ; } button[ ] = {
- BS_PUSHBUTTON, TEXT ("PUSHBUTTON"), BS_DEFPUSHBUTTON, TEXT ("DEFPUSHBUTTON"), BS_CHECKBOX, TEXT ("CHECKBOX"), BS_AUTOCHECKBOX, TEXT ("AUTOCHECKBOX"), BS_RADIOBUTTON, TEXT ("RADIOBUTTON"), BS_3STATE, TEXT ("3STATE"), BS_AUTO3STATE, TEXT ("AUTO3STATE"), BS_GROUPBOX, TEXT ("GROUPBOX"), BS_AUTORADIOBUTTON, TEXT ("AUTORADIO") }; #define NUM (sizeof(button) / sizeof(button[0])) LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ; LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { static HWND hwndButton[NUM] ; static RECT rect ; static TCHAR szTop[] = TEXT("message wParam lParam"), szUnd[] = TEXT("_______ ______ ______"), szFormat[] = TEXT("%-16s%04X-%04X %04X-%04X"), szBuffer[50]; static int cxChar, cyChar ; HDC hdc ;
- PAINTSTRUCT ps ; int i ; switch (message) { case WM_CREATE : cxChar = LOWORD(GetDialogBaseUnits()) ; cyChar = HIWORD(GetDialogBaseUnits()) ; for (i = 0 ; i < NUM ; i++) hwndButton[i] = CreateWindow(TEXT("button"), button[i].szText, WS_CHILD|WS_VISIBLE|button[i].iStyle, cxChar, cyChar*(1+2*i), 20*cxChar, 7*cyChar/4, hwnd, (HMENU)i, ((LPCREATESTRUCT)lParam)->hInstance, NULL) ; return 0 ; case WM_SIZE : rect.left = 24*cxChar ; rect.top = 2*cyChar ; rect.right = LOWORD(lParam) ; rect.bottom = HIWORD(lParam) ; return 0 ; case WM_PAINT : InvalidateRect (hwnd, &rect, TRUE) ; hdc = BeginPaint (hwnd, &ps) ; SelectObject(hdc,GetStockObject(SYSTEM_FIXED_FONT));
- SetBkMode (hdc, TRANSPARENT) ; TextOut (hdc, 24 * cxChar, cyChar, szTop, lstrlen (szTop)); TextOut (hdc, 24 * cxChar, cyChar, szUnd, lstrlen (szUnd)) ; EndPaint (hwnd, &ps) ; return 0 ; case WM_DRAWITEM : case WM_COMMAND : ScrollWindow (hwnd, 0, -cyChar, &rect, &rect) ; hdc = GetDC (hwnd) ; SelectObject(hdc, GetStockObject(SYSTEM_FIXED_FONT)); TextOut (hdc, 24*cxChar, cyChar*(rect.bottom/cyChar-1), szBuffer, wsprintf (szBuffer, szFormat, message==WM_DRAWITEM ? TEXT ("WM_DRAWITEM") : TEXT ("WM_COMMAND"), HIWORD (wParam), LOWORD (wParam), HIWORD (lParam), LOWORD (lParam))) ; ReleaseDC (hwnd, hdc); ValidateRect (hwnd, &rect); break; case WM_DESTROY : PostQuitMessage(0) ; return 0 ; } return DefWindowProc (hwnd, message, wParam, lParam) ; }
- Để tạo ra một child window control bạn dùng cấu trúc CreateWindow với các thông số như sau. · Tên lớp : TEXT ("button") · Text cửa sổ : Button[i].szText · Kiểu cửa sổ : WS_CHILD | WS_VISIBLE | button[i].iStyle · Vị trí x : cxChar · Vị trí y : cyChar*( 1+2*i ) · Chiều rộng : 20*xChar · Chiều cao : 7*yChar*4 · Handle cửa sổ cha : hwnd · Chỉ danh của cửa sổ con : (HMENU) i · Thẻ quản Handle : ((LPCREATESTRUCT) lParam-> hInstance, NULL) ; · Các thông số thêm : NULL Trong đó tên lớp là cố định. Tên cửa sổ do chúng ta đặt. Kiểu cửa sổ sử dụng là WS_CHILD, WS_VISIBLE và một trong 9 kiểu button (BS_PUSHBUTTON, BS_CHECKBOX,...). Tiếp theo là 4 thông số xác định ví trí x, ví trí y, kích thước theo chiều rộng, kích thước chiều cao của cửa sổ con trên vùng client của cửa sổ cha. hwnd là handle của cửa sổ cha. ID là chỉ danh của mỗi cửa sổ con (mỗi cửa sổ con có duy nhất mỗi số ID). ID này phải ép kiểu HMENU để chỉ định trình đơn. lParam thực chất là một con trỏ đến cấu trúc LPCREATESTRUCT có thành phần hInstance. Dó đó muốn lấy thẻ quản hInstance thì phải ép kiểu lParam. Lớp Push Button Trong ví dụ 3.1 có hai Push Button được tạo ra bằng hàm CreateWindow với kích thước và ví trí được xác định bởi người lập trình. Các Push Button được sử dụng để bật tắt một hành động tức thời chứ không giữ được trạng thái bật hay tắt
- lâu dài như checkbox được. Trên đây là hai kiểu cửa sổ BS_PUSHBUTTON và BS_DEFBUTTON (kiểu nút bấm mặc định). Hai kiểu này khi thiết kế thì khác nhau nhưng khi sử dụng thì nó có chức năng hoàn toàn giống nhau. Khi nhấn chuột vào nút này thì nút này gởi thông điệp WM_COMMAND đến cửa sổ cha với mã thông báo BN_CLICK. Có thể tác động đến nút bấm này bằng cách gọi hàm. SendMessage( hwndButton, BM_SETSTASE, 1, 0 ); Nếu muốn nút nhấn này trở lại trạng thái bình thường thì gọi hàm : SendMessage(hwndButton, BM_SETSTASE, 0, 0 ); hwndButton là định danh của cửa sổ con được trả về bởi hàm CreateWindow. Lớp Check Box Một check box là là một hộp vuông kèm theo chữ. Thông thường chữ nằm ở bên trái của hộp. Tuy nhiên, cũng có thể đặt chữ nằm ở bên phải bằng cách thêm vào kiểu BS_LEFTTEXT khi tạo một button. Các check box cho phép người dùng chọn các tùy chọn, nó hoạt động như một công tắc. Có hai loại check box thông dụng đó là BS_CHECKBOX và BS_AUTOCHECKBOX. Khi sử dụng loại BS_CHECKBOX, chúng ta tự đặt dấu check box bằng cách gởi đến kiểu điều khiển này thông điệp BS_SETCHECK. Thông số wParam trong hàm SendMessage được đặt giá trị 1 để tạo đánh dấu, và bằng 0 khi muốn hủy đánh dấu. Lấy trạng thái của một check box bằng cách gởi đến kiểu điều khiển này thông điệp BM_GETCHECK. Dùng đoạn chương trình sau để bật tắt dấu check khi xử lý thông điệp WM_COMMAND được gởi đến từ các kiểu điều khiển. SendMessage((HWND)lParam, BM_SETCHECK, (WPARAM)!SendMessage( (HWND)lParam, BM_GETCHECK, 0, 0), 0); Chú ý toán tử ! (NOT) đứng trước hàm SendMessage. Giá trị lParam là handle của cửa sổ con gởi đến cửa sổ cha trong thông điệp WM_COMMAND. Muốn biết trạng thái của check box nào đó thì gởi tới nó thông điệp BM_GETCHECK. Để khởi động một check box loại BS_CHECKBOX với trạng thái được đánh dấu, bằng cách gởi đến nó một thông điệp BM_SETCHECK theo cấu trúc. SendMessage (hwndButton,BM_SETCHECK, 1, 0); Còn check box BS_AUTOCHECK là loại nút bấm mà tự nó đánh dấu bật hay tắt cho chính nó. Muốn lấy trạng thái của check box hiện hành, chỉ cần gởi thông điệp BM_GETCHECK đến kiểu điều khiển này theo cấu trúc.
- iCheck = SendMessage (hwndButton, BM_SETCHECK, 1, 0); iCheck mang giá trị TRUE nếu check box ở trạng thái chọn, còn ngược lại iCheck mang giá trị FALSE. Ngoài ra còn có hai loại check box khác là BS_3STATE và BS_AUTO3STATE. Hai loại này còn có thêm trạng thái thứ 3, đó là trạng thái nút check box có màu xám xuất hiện khi bạn gởi thông điệp WM_SETCHECK với tham số wParam bằng 2 đến check box này. Màu xám cho biết người dùng chọn lựa không thích hợp hay không xác định. Lớp Radio Button Một radio button là một vòng tròn có kèm theo chữ. Tại một thời điểm chỉ có một radio button được nhấn. Các radio thường được nhóm lại để sử dụng cho việc lựa chọn duy nhất trong nhóm. Trạng thái các radio button không bật tắt như check box. Có nghĩa, khi nhấn chuột vào radio button thì button này được đánh dấu, và khi ta nhấn chuột vào một lần nữa thì radio đó cũng vẫn ở trạng thái đánh dấu. Có hai kiểu radio button là BS_RADIOBUTTON và BS_AUTORADIOBUTTON, nhưng kiểu thứ hai chỉ sử dụng trong hộp thoại. Khi nhận thông điệp WM_COMMAND từ radio button, thì chúng ta phải đánh dấu radio đó bằng cách gởi thông điệp BM_SETCHECK với thông số wParam bằng 1 như sau. SendMessage(hwndButton, BM_SETCHECK, 1, 0); Tất cả các radio button trong cùng một nhóm, nếu bạn muốn tắt dấu check thì bạn gởi đến chúng thông điệp BM_SETCHECK với thông số wParam bằng 0 như sau. SendMessage(hwndButton, BM_SETCHECK, 0, 0); Lớp Group Box Group box có kiểu BS_GROUPBOX, đây là loại button đặc biệt. Một group box chỉ đơn giản là một đường viền có dòng tiêu đề ở trên đỉnh. Group box không xử lý các thông điệp bàn phím, không xử lý các thông điệp chuột và cũng không gởi thông điệp WM_COMMAND đến cửa sổ cha của nó. Các group box thường được sử dụng bao quanh các kiểu điều khiển khác. LỚP STATIC
- Tạo ra một lớp tĩnh bằng cách sử dụng "static" khi tạo lớp cửa sổ trong hàm CreateWindow. Lớp tĩnh không nhận nhập dữ liệu từ bàn phím cũng như từ chuột, và không gởi thông điệp WM_COMMAND đến cửa sổ cha. Khi di chuyển hay nhấn chuột vào các cửa sổ con tĩnh, cửa sổ con này bẫy thông điệp WM_NCHITTEST và trả về giá trị HTTRANSPARENT đến Windows. Điều này làm cho Windows gởi cùng thông điệp WM_NCHITTEST cho cửa sổ cha. Cửa sổ cha thường gởi thông điệp này đến thủ tục DefWindowProc. Các kiểu cửa sổ tĩnh sau đây dùng để vẽ một hình chữ nhật hay một khung lên vùng client của cửa sổ con. Các kiểu FRAME là những đường bao hình chữ nhật, các kiểu RECT là những hình chữ nhật : SS_BLACKRECT, SS_GRAYRECT, SS_ WHITERECT. SS_BLACKFRAME, SS_GRAYFAME, SS_WHITEFRAME LỚP EDIT TEXT Trong một phương diện nào đó thì lớp soạn thảo (edit text) được xem là một cửa sổ được định nghĩa sẵn đơn giản nhất. Nhưng xét một khía cạnh khác thì nó lại phức tạp nhất. Dùng tên lớp "edit" cùng với các thông số ví trí x, vị trí y, chiều rộng, chiều cao trong hàm CreateWindow để tạo ra cửa sổ soạn thảo. Khi cửa sổ soạn thảo nhận focus thì chúng ta có thể gõ chữ vào, xoá các chữ, đánh dấu các chữ…vv. Các thao tác trên được Windows hỗ trợ hoàn toàn. Một trong những ứng dụng thường xuyên nhất, và đơn giản nhất của lớp soạn thảo là tạo ra một cửa sổ cho phép người dùng nhập các chữ vào. Để minh họa cho cửa sổ nhập ta xét ví dụ 3.2 sau. v EDITTEXT.CPP #include #define ID_EDIT 1 LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM); TCHAR szAppName[] = TEXT ("PopPad1") ; LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) {
- static HWND hwndEdit ; switch (message) { case WM_CREATE : hwndEdit = CreateWindow (TEXT("edit"), NULL, WS_CHILD | WS_VISIBLE | WS_HSCROLL | WS_VSCROLL | WS_BORDER | ES_LEFT | ES_MULTILINE | ES_AUTOHSCROLL | ES_AUTOVSCROLL, 0, 0, 0, 0, hwnd, (HMENU)ID_EDIT, ((LPCREATESTRUCT) lParam) -> hInstance, NULL) ; return 0 ; case WM_SETFOCUS : SetFocus (hwndEdit) ; return 0 ; case WM_SIZE : MoveWindow (hwndEdit, 0, 0, LOWORD(lParam), HIWORD(lParam), TRUE); return 0 ; case WM_COMMAND : if (LOWORD (wParam) == ID_EDIT) if ( HIWORD(wParam)==EN_ERRSPACE || HIWORD(wParam)==EN_MAXTEXT ) MessageBox(hwnd, TEXT("Edit control out of space."), szAppName, MB_OK | MB_ICONSTOP) ; return 0 ; case WM_DESTROY :
- PostQuitMessage(0) ; return 0 ; } return DefWindowProc (hwnd, message, wParam, lParam) ; } Hạn chế của edit box được định nghĩa sẵn là số ký tự người dùng nhập vào phải không quá 30.000 ký tự chữ. Các kiểu lớp Edit Text Trong ví dụ trên đã tạo một edit box bằng cách gọi hàm CreateWindow. Có kiểu cửa sổ là WS_CHILD, cùng một số tùy chọn. Chúng ta có thể canh trái, phải, giữa các chữ trong vùng cửa sổ edit box bằng cách thay đổi thông số kiểu cửa sổ ES_LEFT, ES_RIGHT, ES_CENTER trong hàm CreateWindow. Có thể tạo một edit control cho phép hiển thị nhiều hàng bằng cách chọn kiểu cửa sổ ES_MULTILINE. Một edit control mặc định chỉ cho phép nhập một hàng ký tự cho đến cuối edit box. Sử dụng ES_AUTOHSCROLL, ES_AUTOVSCROLL để tạo một edit control có thanh cuộn ngang, và cuộn đứng tự động. Có thể thêm thanh cuộn ngang và đứng vào edit control bằng cách sử dụng kiểu cửa sổ WS_HSCROLL, WS_VSCROLL. Dùng kiểu cửa sổ WS_BORDER để tạo đường viền cho edit control. Kích thước của edit control được xác định bằng cách gọi hàm MoveWindow khi hàm WndProc xử lý thông điệp WM_SIZE. Trong ví dụ trên thì kích thước của edit control được đặt bằng kích thước của cửa sổ chính. MoveWindow(hwndEdit, 0, 0, LOWORD(lParam), HIWORD(lParam), TRUE); Các edit control gởi thông điệp WM_COMMAND cùng các thông số wParam, lParam đến window cửa sổ cha. Với ý nghĩa : LOWORD(wParam) là ID cửa sổ con, HIWORD(wParam) là mã thông báo. lParam là handle của edit control. Mã thông báo ý nghĩa EN_SETFORCUS Endit control nhận focus nhập. EN_KILLFORCUS Endit control mất focus nhập.
- EN_CHANGE Nội dung của edit control sẽ thay đổi. EN_UPDATE Nội dung của edit control thay đổi. EN_ERRSPACE Edit control chạy quá thời gian. EN_MAXTEXT Edit control chạy quá không gian khi chèn. EN_HSCROLL Thanh cuộn đứng của edit control bị tác động. EN_VSCROLL Thanh cuộn nằm của edit control bị tác động. Bảng Danh sách mã thông báo của edit Control. Các thông điệp đến một lớp Edit Text Các thứ tự thông điệp sau cho phép cắt, sao chép, xoá các phần chữ được chọn (selected). SendMessage (hwndEdit, WM_CUT, 0, 0); SendMessage (hwndEdit, WM_COPY, 0, 0); SendMessage (hwndEdit, WM_CLEAR, 0, 0); Với WM_CUT cắt phần chữ đã được đánh dấu đưa vào vùng Clipboard. WM_COPY sao chép phần chữ đã được đánh dấu đưa vào Clipboard nhưng phần đánh dấu vẫn còn trên edit control. WM_CLEAR xóa phần chữ đã được đánh dấu mà không đưa vào clipboard. Chèn phần chữ nằm trong clipboard vào vùng soạn thảo edit control bằng cách gọi hàm. SendMessage (hwndEdit, WM_PASTE , 0, 0); Nhận bắt đầu và kết thúc của phần chữ đã chọn bằng cách gọi hàm : SendMessage (hwndEdit, EM_GETSEL, (WPARAM)&iStart, (LPARAM)&iEnd ); iStart lưu vị trí bắt đầu và iEnd lưu ví trí kết thúc.
- Để thay thế phần chữ đã chọn bằng chữ khác, ta dùng hàm ; SendMessage(hwndEdit,EM_REPLACESEL,0,(LPARAM)szString); Trong đó szString là chuỗi muốn thay thế. Đối với edit control nhiều dòng, ta đếm số dòng chữ bằng hàm. iCount = SendMessage (hwndEdit, EM_GETLINECOUNT, 0, 0); Các dòng trong edit control được đánh số bắt thứ tự từ 0. Lấy chiều dài của một dòng bằng lệnh. iLength = SendMessage (hwndEdit, EM_LINELENGTH, iLine, 0). Chép hàng này vào bộ đệm bằng cách gọi hàm. iLength = SendMessage ( hwdEdit, EM_GETLINE, iLine, (LPARAM)Buffer ). LỚP LIST BOX List box là tập hợp các chuỗi kí tự được gói gọn trong một hình chữ nhật. Một chương trình có thể thêm hoặc xóa các chuỗi trong list box bằng cách gởi các thông điệp đến thủ tục window của list box. List box control gởi thông điệp WM_COMMAND đến cửa sổ cha khi có một mục trong list box bị đánh dấu. Cửa sổ cha xác nhận các mục trong list box đã bị đánh dấu. Một list box có thể chọn được một mục hay nhiều mục cùng một lúc (tùy theo loại list box đơn hay kép). Các kiểu List Box Chúng ta tạo một cửa sổ con list box bằng hàm CreateWindow với lớp cửa sổ là "listbox" cùng với loại cửa sổ WS_CHILD. Tuy nhiên kiểu cửa sổ con mặt định này không gởi thông điệp WM_COMMAND đến cửa sổ cha, có nghĩa chương trình tự kiểm tra việc đánh dấu các danh mục trong list box. Vì thế, các kiểu điều khiển list box thường định nghĩa kiểu list box LBS_NOTYFY, điều này cho phép cửa sổ cha nhận thông điệp WM_COMMAND từ list box. Nếu muốn sắp xếp các mục trong list box thì sử dụng kiểu LBS_SORT. Theo mặc định, những list box tạo ra là những list box đơn. Vì thế, nếu muốn tạo ra một list box kép (tức list box cho phép người dùng chọn nhiều dòng cùng lúc) thì phải sử dụng loại list box LBS_MULTIPLESEL.Thông thường, List box sẽ tự cập nhật khi một mục được thêm vào. Tuy nhiên có thể ngăn cản việc cập nhật này
- bằng kiểu LBS_NOREDRAW. Việc làm này đôi khi không thích lắm, thay vào đó chúng ta có thể sử dụng thông điệp WM_SETREDRAW để ngăn chặn tạm thời việc vẽ lại của list box. Theo mặc định, các mục trong list box không có đường viền bao quanh khi hiển thị trên màn hình. Tuy nhiên, có thể thêm đường viền cho các mục bằng định danh cửa sổ WS_BORDER. Thêm thanh cuộn đứng vào list box bằng cách thêm định danh cửa sổ WS_VSCROLL. Thông thường windows định nghĩa một list box gồm các thông số sau : LBS_NOTIFY | LBS_SORT | WS_VSCROLL | WS_BORDER. Ngoài ra còn có các thông số WS_SIZEBOX và WS_CAPTION dùng để thay đổi kích thước và thêm tiêu đề cho list box. Nên tạo ra một list box có chiều rộng bằng chiều dài của chuổi dài nhất trong list box cộng với chiều dài của thanh cuộn dọc. Chiều dài của thanh cuộn dọc được xác định bằng hàm. GetSystemMetrics(SM_CXVCROLL); Đặt các chuỗi vào List Box Để thêm một chuỗi vào list box ta gởi các thông điệp đến thủ tục Windows list box bằng hàm SendMessage. Khi truyền chuỗi cho hàm SendMessage thì thông số wParam là một con trỏ, trỏ đến chuỗi được kết thúc bởi ký tự NULL. Hàm SendMessage trả về mã LB_ERRSPACE (giá trị -2) khi Windows chạy quá không gian bộ nhớ dành cho list box. Hàm SendMessage trả về mã LB_ERR ( -1) khi xảy ra lỗi khác và trả về mã LB_OKAY ( 0 ) nếu thao tác thêm thành công. Nếu sử dụng kiểu LBS_SORT thì khi thêm một chuỗi vào list box chỉ cần dùng chỉ thị LB_ADDSTRING theo cấu trúc. SendMessage(hwndList, LB_ADDSTRING, 0, (LPARAM) szString); Với szString là chuỗi cần thêm vào list box. Nếu trong list box không dùng kiểu LBS_SORT thì có thể chèn một chuỗi với chỉ thị LB_INSERTSTRING cùng vị trí muốn chèn bằng hàm. SendMessage(hwndList, LB_INSERTSTRING, iIndex, (LPARAM) szString); iIndex là vị trí muốn chèn chuỗi vào. Nếu giá trị này bằng -1 thì chuỗi được chèn vào đáy của list box. Xóa một chuỗi trong list box bằng chỉ thị LB_DELETESTRING.
- SendMessage(hwndList, LB_DELETESTRING, iIndex, 0); Xóa hết các phần tử nằm trong list box thì dùng chỉ thị LB_RESETCONTENT với cấu trúc. SendMessage(hwndList, LB_LB_RESETCONTENT, 0, 0 ); Khi thêm vào hay xóa thì Windows tự cập nhật lại list box. Tuy nhiên ta cũng có thể tạm thời cản sự cập nhật này bằng cách tắt cờ vẽ lại list box. SendMessage(hwndList, WMSETREDRAW, FALSE, 0); Sau khi thực hiện xong ta bật cờ vẽ lại list box bằng hàm. SendMessage(hwndList, WMSETREDRAW, TRUE, 0); Chọn và lấy các mục trên List Box Tương tự như đặt chuỗi vào List box , chọn và lấy mục trong List box cũng phải gởi các thông điệp đến thủ tục Window List box bằng hàm SendMessage. Dùng chỉ thị LB_GETCOUNT để đếm số mục trong List box. iCount = SendMessage (hwndList, LB_GETCOUNT, 0, 0 ); Làm sáng mục chọn mặc định thì dùng LB_SETCURSEL. SendMessage (hwndList, LB_SETCURSEL, iIndex, 0 ); Nếu đặt giá trị iIndex bằng -1 thì window sẽ bỏ tất cả các mục chọn. Để chọn các mục dựa trên chữ bắt đầu của mục, ta dùng hàm. iIndex = SendMessage (hwndlist, LB_SELECTSTRING, iIndex, (LPARAM) szSearchString); iIndex là vị trí bắt đầu của việc tìm với kí tự đầu giống szSearchString. Nếu giá trị iIndex bằng -1 thì việc tìm bắt đầu từ vị trí đầu tiên. Hàm sẽ trả về giá trị tìm đượci. Nếu chuỗi không tồn tại thì hàm trả về mã lỗi LB_ERR. Xác định mục đã chọn khi nhận được thông điệp WM_COMMAND từ list box bằng hàm. iIndex = SendMessage(hwndList, LB_GETCURSEL, 0, 0);
- Hàm trả về vị trí của mục được chọn, còn ngược lại nếu không có mục nào được chọn thì hàm trả về mã lỗi LB_ERR. Muốn xác định chiều dài của một chuỗi bất kỳ có trong list box dùng hàm. iLength = SendMessage(hwndList, LB_GETTEXTLEN, iIndex, 0); Với iIndex là ví trí của chuỗi cần xác định chiều dài. Để chép chuỗi trên vào vùng đệp Buffer, ta dùng hàm. iLength = SendMessage(hwndList, LB_GETTEXT, iInde, (LPARAM) Buffer); Giá trị trả về của hai hàm trên là chiều dài của chuỗi ký tự. Nên định kích thước vùng buffer sao cho đủ chứa chiều dài của chuỗi cộng thêm ký tự kết thúc chuỗi cần ghi vào. Tuy nhiên, đối với list box chọn kép thì chúng ta không thể dùng các chỉ thị LB_SETCURSEL, LB_GETCURSEL, hoặc LB_SELECTSTRING. Thay vào đó phải dùng chỉ thị LB_SETSEL để chọn một mục mà không làm ảnh hưởng đến các mục đã chọn khác. SendMessage(hwndList, LB_SETSEL, wParam, iIndex); Tham số wParam khác 0 để chọn và làm sáng mục, bằng 0 để hủy việc chọn. Xác định trạng thái của một mục nào đó trong list box (loại list box chọn kép) dùng hàm. iSelect = SendMessage(hwndList, LB_GETSEL, iIndex, 0); Hàm trả về giá trị khác 0 nếu mục có vị trí iIndex được chọn, và bằng 0 nếu mục ở vị trí đó không được chọn. Nhận các thông điệp từ List Box Khi dùng chuột nhấn vào list box, khi đó list box nhận focus nhập. Cửa sổ cha có thể đặt focus nhập đến list box bằng hàm. SetFocus (hwndList); Khi list box nhận focus nhập, chúng ta dùng con chuột, các phím chữ, phím Spacebar để chọn các mục trong list box. List box gởi thông điệp WM_COMMAND với các thông số wParam, lParam đến cửa sổ cha với ý nghĩa :
- LOWORD (wParam) ID cửa sổ con. HIWORD (wParam) Mã thông báo. lParam Handle cửa sổ con. Mã thông báo Giá Ý nghĩa trị LBN_ERRSPACE -2 Con trol list box chạy quá không gian LBN_SELCHANGE 1 Cho biết mục chọn hiện hành đã thay đổi LBN_DBLCLK 2 Cho biết một mục đã bị double click với chuột LBN_SELCANCEL 3 Cho biết người dùng thay đổi mục chọn trong list box LBN_SETFOCUS 4 Cho biết list box đang nhận được focus nhập LBN_KILLFOCUS 5 Cho biết list box đã mất focus nhập Bảng Các giá trị của mã thông báo Mã thông báo LBN_ERRSPACE, LBN_SELCHANGE được gởi đến cửa sổ cha khi kiểu cửa sổ list box bao gồm LBS_NOTIFY. Một ứng dụng List Box Sau đây là một ví dụ về list box, kết quả chương trình sau khi chạy tTrong ví dụ này, ta tạo ra một list box gồm các phần tử cam, chanh, nho… . Khi dùng chuột hay dùng phím Spacebar cộng với phím mũi tên để chọn các mục trong list box, mục được chọn sẽ có màu tô thể hiện được chọn lựa (mặc định trong Windows là màu xanh) và nội dung mục chọn này được hiển thị lên kiểu điều khiển tĩnh nằm bên trên vùng thao tác của cửa sổ chính. Chương trình minh họa như sau v LISTBOX.CPP (trích dẫn) #include #define ID_LIST 1 #define ID_TEXT 2
- LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM); void FillListBox (HWND hwndList) { int i; static TCHAR *tc[]={TEXT("cam"), TEXT("quyt"), TEXT("buoi"), TEXT("tao"), TEXT("chanh"), TEXT("xoai"), TEXT("nho")}; for(i=0; i
- (HINSTANCE)GetWindowLong(hwnd, GWL_HINSTANCE), NULL ) ; // tạo một control "static" hwndText = CreateWindow ( TEXT("static"), NULL, WS_CHILD | WS_VISIBLE | SS_LEFT, cxChar, cyChar, GetSystemMetrics (SM_CXSCREEN), cyChar, hwnd, (HMENU) ID_TEXT, (HINSTANCE)GetWindowLong(hwnd, GWL_HINSTANCE), NULL) ; FillListBox (hwndList) ; return 0 ; case WM_SETFOCUS : //đặt focus nhập cho list box SetFocus (hwndList) ; return 0 ; //xử lý các thông điệp khi chọn mục trong list box case WM_COMMAND : if (LOWORD (wParam) == ID_LIST && HIWORD (wParam) == LBN_SELCHANGE) { // lấy chỉ ví trí của mục được chọn iIndex=SendMessage(hwndList,LB_GETCURSEL, 0, 0); iLength = SendMessage (hwndList, LB_GETTEXTLEN, iIndex, 0) + 1 ; pVarName =(char*) calloc (iLength, sizeof (TCHAR)) ; SendMessage ( hwndList, LB_GETTEXT, iIndex, (LPARAM)pVarName) ; SetWindowText (hwndText, pVarName) ;
CÓ THỂ BẠN MUỐN DOWNLOAD
-
Lý thuyết lập trình cơ bản - Chương I: Các bộ vi điều khiển 8051
13 p | 2234 | 919
-
Các cấu trúc điều khiển
8 p | 157 | 47
-
Vẽ các đối tượng trong GDI
58 p | 103 | 27
-
C++: Các cấu trúc điều khiển
4 p | 159 | 26
-
Các thao tác điều khiển màn hình
2 p | 68 | 10
-
Bài 09 - Sử dụng các control
8 p | 37 | 8
-
Các cấu trúc điều khiển (phần 1)
43 p | 37 | 7
-
Bài giảng Lập trình hướng đối tượng: Mảng các đối tượng - TS. Nguyễn Mạnh Hùng
18 p | 22 | 7
-
Bài giảng Cơ sở lập trình - Chương 3: Các cấu trúc điều khiển
56 p | 26 | 7
-
Bài giảng Phân tích thiết kế hướng đối tượng: Bài 4.2 - Vũ Thị Dương
13 p | 25 | 6
-
Các cấu trúc điều khiển (phần 2)
30 p | 32 | 6
-
19.1.Canh các đối tượng với nhau
3 p | 54 | 5
-
Bài giảng Ngôn ngữ lập trình C - Chương 5: Các toán tử điều khiển
33 p | 17 | 4
-
Bài giảng Lập trình Windows - Chương 5: Lập trình tài nguyên (2016)
16 p | 6 | 2
-
Bài giảng Tin học chuyên ngành: Chương 4 - Hoàng Xuân Dương
104 p | 19 | 1
-
Bài giảng Phương pháp lập trình - Chương 3: Các cấu trúc điều khiển (2016)
27 p | 4 | 1
-
Phương pháp điều khiển dựa vào việc định lượng đại số gia tử với bảng SAM có điều kiện
7 p | 1 | 1

markdown:
# Các đối tượng điều khiển
Chia sẻ: Danh Ngoc | Ngày: | Loại File: PDF | Số trang:41
lượt xem 24
download
![](http://image.tlvnimg.com/document/thumbnail/2010/20100509/nuoiheocuoivo/80x100/cac_doi_tuong_dieu_khien_033.jpg)
##
Các đối tượng điều khiển
[Vui lòng tải xuống để xem tài liệu đầy đủ](javascript:void(0);)
Download
![](http://static.tlvnimg.com/b2013az/templates/version1/default/images/down16x21.png)
CÁC ĐỐI TƯỢNG ĐIỀU KHIỂN Các đối tượng điều khiển (control) là các thành phần tương tác trực quan, thể hiện rõ cơ chế giao tiếp đồ họa giữa ứng dụng và người dùng. Nhờ các đối tượng này, các chương trình ứng dụng trong Windows trở nên thân thiện và dễ dùng. Ví thế, chúng là các thành phần cơ bản không thể thiếu trong hầu hết các ứng dụng. Trong chương này, chúng ta sẽ tìm hiểu các tạo lập và xử lý cho các đối tượng điều khiển thông qua các lớp (class) sau : · Lớp Button...
Bình luận(0)
[Đăng nhập để gửi bình luận!](javascript:void(0);)
##
Nội dung Text: Các đối tượng điều khiển
- CÁC ĐỐI TƯỢNG ĐIỀU KHIỂN Các đối tượng điều khiển (control) là các thành phần tương tác trực quan, thể hiện rõ cơ chế giao tiếp đồ họa giữa ứng dụng và người dùng. Nhờ các đối tượng này, các chương trình ứng dụng trong Windows trở nên thân thiện và dễ dùng. Ví thế, chúng là các thành phần cơ bản không thể thiếu trong hầu hết các ứng dụng. Trong chương này, chúng ta sẽ tìm hiểu các tạo lập và xử lý cho các đối tượng điều khiển thông qua các lớp (class) sau : · Lớp Button (nút bấm). · Lớp Static (tĩnh). · Lớp Edit Box (soạn thảo). · Lớp List Box (danh sách). · Lớp Combo Box. · Lớp Scroll Bar (thanh cuộn). GIỚI THIỆU TỔNG QUAN Một kiểu điều khiển được xem như là một cửa sổ con. Có thể tạo nhiều cửa sổ con trong cùng một cửa sổ cha. Các cửa sổ con xác định handle cửa sổ của cha bằng cách gọi hàm : hwndParent = GetParent (hwnd); hwnd là handle của cửa sổ con cần lấy handle của cửa sổ cha. Và khi đã lấy được handle của cửa sổ cha, cửa sổ con có quyền gởi các thông điệp đến cửa sổ cha thông qua hàm. SendMessage(hwndParent, message, wParam, lParam); message là thông điệp cần gởi đến thủ tục xử lý của cửa sổ cha. wParam là chỉ danh ID của cửa sổ con, còn lParam ghi lại trạng thái của cửa sổ con. Vậy chúng ta có thể tạo một thành phần điều khiển dạng cửa sổ con hay còn gọi là "child window control". Cửa sổ con có nhiệm vụ xử lý các thông điệp như bàn
- phím, thông điệp chuột và thông báo cho cửa sổ cha khi trạng thái của cửa sổ con thay đổi. Như vậy cửa sổ con trở thành công cụ giao tiếp (cho phép nhập và xuất) giữa người dùng với chương trình. Tuy chúng ta có thể tạo ra một cửa sổ con cho chính mình, nhưng chúng ta nên tận dụng các lớp cửa sổ con đã được Windows định nghĩa sẵn hay còn gọi là những kiểu điều khiển chuẩn. Những kiểu điều khiển chuẩn này thường là các nút bấm (button), hộp kiểm tra (check box), hộp soạn thảo (edit box), hộp danh sách (list box), combo box, các thanh cuộn và chuỗi chữ. Ví dụ muốn tạo ra một nút bấm ở trên màn hình chỉ cần gọi hàm CreateWindows, mà chẳng cần phải quan tâm đến cách vẽ, cách nhận chuột hay là chớp khi bị kích hoạt. Tất cả điều này đều do Windows xử lý. Điều quan trọng làphải chặn thông điệp WM_COMMAND của các điều khiển để xử lý thông điệp này theo những mục đích khác nhau. Các kiểu điều khiển con thường được dùng trong hộp thoại. Như đã minh họa trong chương 2, ở đó các điều khiển nhận hộp thoại làm cửa sổ cha. Tuy nhiên, cũng có thể tạo các kiểu điều khiển con trực tiếp trên vùng cửa sổ chính, bằng cách gọi hàm CreateWindow và điều chỉnh vị trí cùng với kích thước của nó cho thích hợp bằng hàm MoveWindow. Thủ tục xử lý thông điệp của cửa sổ cha gửi các thông điệp đến các khiểu điều khiển con, và ngược lại các child window control gởi các thông điệp để yêu cầu cửa sổ cha xử lý các thông điệp đó. Để tạo một cửa sổ ứng dụng bình thường. Đầu tiên phải đăng ký lớp cửa sổ bằng hàm RegisterClass. Tiếp theo là khởi tạo lớp đã đăng ký thông qua hàm CreateWindow. Còn trường hợp muốn tạo một lớp đã được định nghĩa sẵn thì không cần đăng ký cho lớp cửa sổ con muốn tạo. Sử dụng các kiểu điều khiển trực tiếp trên cửa sổ chính đòi hỏi các tác vụ cấp thấp hơn so với dùng các kiểu điều khiển trên hộp thoại. Và các kiểu điều khiển tạo ra trên cửa sổ chính không có hỗ trợ các tiện ích. Ví dụ như chúng ta không thể sử dụng phím bấm tab để chuyển focus giữa các kiểu điều khiển với nhau. LỚP BUTTON Để tìm hiểu các kiểu điều khiển, xem xét ví dụ 3.1 sau. Trong ví dụ này đã tạo ra 9 cửa sổ con chuẩn trên một cửa sổ cha như hình 3.1. Nhấp chuột vào các nút, lúc đó các nút sẽ gởi thông điệp WM_COMMAND đến thủ tục xử lý thông điệp WndProc của cửa sổ cha. Thủ tục WndProc xử lý và in ra màn hình các thông số lParam và wParam của thông điệp gởi tới này.Trong đó lParam là handle của cửa sổ con gởi thông điệp đến cửa sổ cha. wParam có hai phần LOWORD và HIWORD, LOWORD cho biết ID của cửa sổ con, HIWORD là mã thông báo. Mã thông báo nút bấm là một trong những giá trị sau.
- Định danh mã thông báo Button Giá trị BN_CLICKED 0 BN_PAINT 1 BN_HILETE hay BN_PUSHED 2 BN_UNHILITE hay 3 BN_UNPHUSHED BN_DISABLE 4 BN_DOUBLECLICKED hay 5 BN_DBCLICK BN_SETFOCUS 6 BN_KILLFOCUS 7 Bảng Định danh mã thông báo Button Không bao giờ thấy được các giá trị của nút bấm, chỉ biết rằng giá trị từ 1 đến 4 dành cho kiểu button BS_USERBUTTON, giá trị 5 dành cho kiểu BS_RADIOBUTTON, BS_AUTORADIOBUTTON, BS_OWNEDRAW, hay các nút bấm khác nếu nút bấm đó bao gồm kiểu BS_NOTYFY. Giá trị 5,6 dành cho các kiểu nút bấm bao gồm cả cờ NOTYFY. Sau đây là chương trình chính. v CONTROL1.CPP (trích dẫn) struct { int iStyle ; TCHAR *szText ; } button[ ] = {
- BS_PUSHBUTTON, TEXT ("PUSHBUTTON"), BS_DEFPUSHBUTTON, TEXT ("DEFPUSHBUTTON"), BS_CHECKBOX, TEXT ("CHECKBOX"), BS_AUTOCHECKBOX, TEXT ("AUTOCHECKBOX"), BS_RADIOBUTTON, TEXT ("RADIOBUTTON"), BS_3STATE, TEXT ("3STATE"), BS_AUTO3STATE, TEXT ("AUTO3STATE"), BS_GROUPBOX, TEXT ("GROUPBOX"), BS_AUTORADIOBUTTON, TEXT ("AUTORADIO") }; #define NUM (sizeof(button) / sizeof(button[0])) LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ; LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { static HWND hwndButton[NUM] ; static RECT rect ; static TCHAR szTop[] = TEXT("message wParam lParam"), szUnd[] = TEXT("_______ ______ ______"), szFormat[] = TEXT("%-16s%04X-%04X %04X-%04X"), szBuffer[50]; static int cxChar, cyChar ; HDC hdc ;
- PAINTSTRUCT ps ; int i ; switch (message) { case WM_CREATE : cxChar = LOWORD(GetDialogBaseUnits()) ; cyChar = HIWORD(GetDialogBaseUnits()) ; for (i = 0 ; i < NUM ; i++) hwndButton[i] = CreateWindow(TEXT("button"), button[i].szText, WS_CHILD|WS_VISIBLE|button[i].iStyle, cxChar, cyChar*(1+2*i), 20*cxChar, 7*cyChar/4, hwnd, (HMENU)i, ((LPCREATESTRUCT)lParam)->hInstance, NULL) ; return 0 ; case WM_SIZE : rect.left = 24*cxChar ; rect.top = 2*cyChar ; rect.right = LOWORD(lParam) ; rect.bottom = HIWORD(lParam) ; return 0 ; case WM_PAINT : InvalidateRect (hwnd, &rect, TRUE) ; hdc = BeginPaint (hwnd, &ps) ; SelectObject(hdc,GetStockObject(SYSTEM_FIXED_FONT));
- SetBkMode (hdc, TRANSPARENT) ; TextOut (hdc, 24 * cxChar, cyChar, szTop, lstrlen (szTop)); TextOut (hdc, 24 * cxChar, cyChar, szUnd, lstrlen (szUnd)) ; EndPaint (hwnd, &ps) ; return 0 ; case WM_DRAWITEM : case WM_COMMAND : ScrollWindow (hwnd, 0, -cyChar, &rect, &rect) ; hdc = GetDC (hwnd) ; SelectObject(hdc, GetStockObject(SYSTEM_FIXED_FONT)); TextOut (hdc, 24*cxChar, cyChar*(rect.bottom/cyChar-1), szBuffer, wsprintf (szBuffer, szFormat, message==WM_DRAWITEM ? TEXT ("WM_DRAWITEM") : TEXT ("WM_COMMAND"), HIWORD (wParam), LOWORD (wParam), HIWORD (lParam), LOWORD (lParam))) ; ReleaseDC (hwnd, hdc); ValidateRect (hwnd, &rect); break; case WM_DESTROY : PostQuitMessage(0) ; return 0 ; } return DefWindowProc (hwnd, message, wParam, lParam) ; }
- Để tạo ra một child window control bạn dùng cấu trúc CreateWindow với các thông số như sau. · Tên lớp : TEXT ("button") · Text cửa sổ : Button[i].szText · Kiểu cửa sổ : WS_CHILD | WS_VISIBLE | button[i].iStyle · Vị trí x : cxChar · Vị trí y : cyChar*( 1+2*i ) · Chiều rộng : 20*xChar · Chiều cao : 7*yChar*4 · Handle cửa sổ cha : hwnd · Chỉ danh của cửa sổ con : (HMENU) i · Thẻ quản Handle : ((LPCREATESTRUCT) lParam-> hInstance, NULL) ; · Các thông số thêm : NULL Trong đó tên lớp là cố định. Tên cửa sổ do chúng ta đặt. Kiểu cửa sổ sử dụng là WS_CHILD, WS_VISIBLE và một trong 9 kiểu button (BS_PUSHBUTTON, BS_CHECKBOX,...). Tiếp theo là 4 thông số xác định ví trí x, ví trí y, kích thước theo chiều rộng, kích thước chiều cao của cửa sổ con trên vùng client của cửa sổ cha. hwnd là handle của cửa sổ cha. ID là chỉ danh của mỗi cửa sổ con (mỗi cửa sổ con có duy nhất mỗi số ID). ID này phải ép kiểu HMENU để chỉ định trình đơn. lParam thực chất là một con trỏ đến cấu trúc LPCREATESTRUCT có thành phần hInstance. Dó đó muốn lấy thẻ quản hInstance thì phải ép kiểu lParam. Lớp Push Button Trong ví dụ 3.1 có hai Push Button được tạo ra bằng hàm CreateWindow với kích thước và ví trí được xác định bởi người lập trình. Các Push Button được sử dụng để bật tắt một hành động tức thời chứ không giữ được trạng thái bật hay tắt
- lâu dài như checkbox được. Trên đây là hai kiểu cửa sổ BS_PUSHBUTTON và BS_DEFBUTTON (kiểu nút bấm mặc định). Hai kiểu này khi thiết kế thì khác nhau nhưng khi sử dụng thì nó có chức năng hoàn toàn giống nhau. Khi nhấn chuột vào nút này thì nút này gởi thông điệp WM_COMMAND đến cửa sổ cha với mã thông báo BN_CLICK. Có thể tác động đến nút bấm này bằng cách gọi hàm. SendMessage( hwndButton, BM_SETSTASE, 1, 0 ); Nếu muốn nút nhấn này trở lại trạng thái bình thường thì gọi hàm : SendMessage(hwndButton, BM_SETSTASE, 0, 0 ); hwndButton là định danh của cửa sổ con được trả về bởi hàm CreateWindow. Lớp Check Box Một check box là là một hộp vuông kèm theo chữ. Thông thường chữ nằm ở bên trái của hộp. Tuy nhiên, cũng có thể đặt chữ nằm ở bên phải bằng cách thêm vào kiểu BS_LEFTTEXT khi tạo một button. Các check box cho phép người dùng chọn các tùy chọn, nó hoạt động như một công tắc. Có hai loại check box thông dụng đó là BS_CHECKBOX và BS_AUTOCHECKBOX. Khi sử dụng loại BS_CHECKBOX, chúng ta tự đặt dấu check box bằng cách gởi đến kiểu điều khiển này thông điệp BS_SETCHECK. Thông số wParam trong hàm SendMessage được đặt giá trị 1 để tạo đánh dấu, và bằng 0 khi muốn hủy đánh dấu. Lấy trạng thái của một check box bằng cách gởi đến kiểu điều khiển này thông điệp BM_GETCHECK. Dùng đoạn chương trình sau để bật tắt dấu check khi xử lý thông điệp WM_COMMAND được gởi đến từ các kiểu điều khiển. SendMessage((HWND)lParam, BM_SETCHECK, (WPARAM)!SendMessage( (HWND)lParam, BM_GETCHECK, 0, 0), 0); Chú ý toán tử ! (NOT) đứng trước hàm SendMessage. Giá trị lParam là handle của cửa sổ con gởi đến cửa sổ cha trong thông điệp WM_COMMAND. Muốn biết trạng thái của check box nào đó thì gởi tới nó thông điệp BM_GETCHECK. Để khởi động một check box loại BS_CHECKBOX với trạng thái được đánh dấu, bằng cách gởi đến nó một thông điệp BM_SETCHECK theo cấu trúc. SendMessage (hwndButton,BM_SETCHECK, 1, 0); Còn check box BS_AUTOCHECK là loại nút bấm mà tự nó đánh dấu bật hay tắt cho chính nó. Muốn lấy trạng thái của check box hiện hành, chỉ cần gởi thông điệp BM_GETCHECK đến kiểu điều khiển này theo cấu trúc.
- iCheck = SendMessage (hwndButton, BM_SETCHECK, 1, 0); iCheck mang giá trị TRUE nếu check box ở trạng thái chọn, còn ngược lại iCheck mang giá trị FALSE. Ngoài ra còn có hai loại check box khác là BS_3STATE và BS_AUTO3STATE. Hai loại này còn có thêm trạng thái thứ 3, đó là trạng thái nút check box có màu xám xuất hiện khi bạn gởi thông điệp WM_SETCHECK với tham số wParam bằng 2 đến check box này. Màu xám cho biết người dùng chọn lựa không thích hợp hay không xác định. Lớp Radio Button Một radio button là một vòng tròn có kèm theo chữ. Tại một thời điểm chỉ có một radio button được nhấn. Các radio thường được nhóm lại để sử dụng cho việc lựa chọn duy nhất trong nhóm. Trạng thái các radio button không bật tắt như check box. Có nghĩa, khi nhấn chuột vào radio button thì button này được đánh dấu, và khi ta nhấn chuột vào một lần nữa thì radio đó cũng vẫn ở trạng thái đánh dấu. Có hai kiểu radio button là BS_RADIOBUTTON và BS_AUTORADIOBUTTON, nhưng kiểu thứ hai chỉ sử dụng trong hộp thoại. Khi nhận thông điệp WM_COMMAND từ radio button, thì chúng ta phải đánh dấu radio đó bằng cách gởi thông điệp BM_SETCHECK với thông số wParam bằng 1 như sau. SendMessage(hwndButton, BM_SETCHECK, 1, 0); Tất cả các radio button trong cùng một nhóm, nếu bạn muốn tắt dấu check thì bạn gởi đến chúng thông điệp BM_SETCHECK với thông số wParam bằng 0 như sau. SendMessage(hwndButton, BM_SETCHECK, 0, 0); Lớp Group Box Group box có kiểu BS_GROUPBOX, đây là loại button đặc biệt. Một group box chỉ đơn giản là một đường viền có dòng tiêu đề ở trên đỉnh. Group box không xử lý các thông điệp bàn phím, không xử lý các thông điệp chuột và cũng không gởi thông điệp WM_COMMAND đến cửa sổ cha của nó. Các group box thường được sử dụng bao quanh các kiểu điều khiển khác. LỚP STATIC
- Tạo ra một lớp tĩnh bằng cách sử dụng "static" khi tạo lớp cửa sổ trong hàm CreateWindow. Lớp tĩnh không nhận nhập dữ liệu từ bàn phím cũng như từ chuột, và không gởi thông điệp WM_COMMAND đến cửa sổ cha. Khi di chuyển hay nhấn chuột vào các cửa sổ con tĩnh, cửa sổ con này bẫy thông điệp WM_NCHITTEST và trả về giá trị HTTRANSPARENT đến Windows. Điều này làm cho Windows gởi cùng thông điệp WM_NCHITTEST cho cửa sổ cha. Cửa sổ cha thường gởi thông điệp này đến thủ tục DefWindowProc. Các kiểu cửa sổ tĩnh sau đây dùng để vẽ một hình chữ nhật hay một khung lên vùng client của cửa sổ con. Các kiểu FRAME là những đường bao hình chữ nhật, các kiểu RECT là những hình chữ nhật : SS_BLACKRECT, SS_GRAYRECT, SS_ WHITERECT. SS_BLACKFRAME, SS_GRAYFAME, SS_WHITEFRAME LỚP EDIT TEXT Trong một phương diện nào đó thì lớp soạn thảo (edit text) được xem là một cửa sổ được định nghĩa sẵn đơn giản nhất. Nhưng xét một khía cạnh khác thì nó lại phức tạp nhất. Dùng tên lớp "edit" cùng với các thông số ví trí x, vị trí y, chiều rộng, chiều cao trong hàm CreateWindow để tạo ra cửa sổ soạn thảo. Khi cửa sổ soạn thảo nhận focus thì chúng ta có thể gõ chữ vào, xoá các chữ, đánh dấu các chữ…vv. Các thao tác trên được Windows hỗ trợ hoàn toàn. Một trong những ứng dụng thường xuyên nhất, và đơn giản nhất của lớp soạn thảo là tạo ra một cửa sổ cho phép người dùng nhập các chữ vào. Để minh họa cho cửa sổ nhập ta xét ví dụ 3.2 sau. v EDITTEXT.CPP #include #define ID_EDIT 1 LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM); TCHAR szAppName[] = TEXT ("PopPad1") ; LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) {
- static HWND hwndEdit ; switch (message) { case WM_CREATE : hwndEdit = CreateWindow (TEXT("edit"), NULL, WS_CHILD | WS_VISIBLE | WS_HSCROLL | WS_VSCROLL | WS_BORDER | ES_LEFT | ES_MULTILINE | ES_AUTOHSCROLL | ES_AUTOVSCROLL, 0, 0, 0, 0, hwnd, (HMENU)ID_EDIT, ((LPCREATESTRUCT) lParam) -> hInstance, NULL) ; return 0 ; case WM_SETFOCUS : SetFocus (hwndEdit) ; return 0 ; case WM_SIZE : MoveWindow (hwndEdit, 0, 0, LOWORD(lParam), HIWORD(lParam), TRUE); return 0 ; case WM_COMMAND : if (LOWORD (wParam) == ID_EDIT) if ( HIWORD(wParam)==EN_ERRSPACE || HIWORD(wParam)==EN_MAXTEXT ) MessageBox(hwnd, TEXT("Edit control out of space."), szAppName, MB_OK | MB_ICONSTOP) ; return 0 ; case WM_DESTROY :
- PostQuitMessage(0) ; return 0 ; } return DefWindowProc (hwnd, message, wParam, lParam) ; } Hạn chế của edit box được định nghĩa sẵn là số ký tự người dùng nhập vào phải không quá 30.000 ký tự chữ. Các kiểu lớp Edit Text Trong ví dụ trên đã tạo một edit box bằng cách gọi hàm CreateWindow. Có kiểu cửa sổ là WS_CHILD, cùng một số tùy chọn. Chúng ta có thể canh trái, phải, giữa các chữ trong vùng cửa sổ edit box bằng cách thay đổi thông số kiểu cửa sổ ES_LEFT, ES_RIGHT, ES_CENTER trong hàm CreateWindow. Có thể tạo một edit control cho phép hiển thị nhiều hàng bằng cách chọn kiểu cửa sổ ES_MULTILINE. Một edit control mặc định chỉ cho phép nhập một hàng ký tự cho đến cuối edit box. Sử dụng ES_AUTOHSCROLL, ES_AUTOVSCROLL để tạo một edit control có thanh cuộn ngang, và cuộn đứng tự động. Có thể thêm thanh cuộn ngang và đứng vào edit control bằng cách sử dụng kiểu cửa sổ WS_HSCROLL, WS_VSCROLL. Dùng kiểu cửa sổ WS_BORDER để tạo đường viền cho edit control. Kích thước của edit control được xác định bằng cách gọi hàm MoveWindow khi hàm WndProc xử lý thông điệp WM_SIZE. Trong ví dụ trên thì kích thước của edit control được đặt bằng kích thước của cửa sổ chính. MoveWindow(hwndEdit, 0, 0, LOWORD(lParam), HIWORD(lParam), TRUE); Các edit control gởi thông điệp WM_COMMAND cùng các thông số wParam, lParam đến window cửa sổ cha. Với ý nghĩa : LOWORD(wParam) là ID cửa sổ con, HIWORD(wParam) là mã thông báo. lParam là handle của edit control. Mã thông báo ý nghĩa EN_SETFORCUS Endit control nhận focus nhập. EN_KILLFORCUS Endit control mất focus nhập.
- EN_CHANGE Nội dung của edit control sẽ thay đổi. EN_UPDATE Nội dung của edit control thay đổi. EN_ERRSPACE Edit control chạy quá thời gian. EN_MAXTEXT Edit control chạy quá không gian khi chèn. EN_HSCROLL Thanh cuộn đứng của edit control bị tác động. EN_VSCROLL Thanh cuộn nằm của edit control bị tác động. Bảng Danh sách mã thông báo của edit Control. Các thông điệp đến một lớp Edit Text Các thứ tự thông điệp sau cho phép cắt, sao chép, xoá các phần chữ được chọn (selected). SendMessage (hwndEdit, WM_CUT, 0, 0); SendMessage (hwndEdit, WM_COPY, 0, 0); SendMessage (hwndEdit, WM_CLEAR, 0, 0); Với WM_CUT cắt phần chữ đã được đánh dấu đưa vào vùng Clipboard. WM_COPY sao chép phần chữ đã được đánh dấu đưa vào Clipboard nhưng phần đánh dấu vẫn còn trên edit control. WM_CLEAR xóa phần chữ đã được đánh dấu mà không đưa vào clipboard. Chèn phần chữ nằm trong clipboard vào vùng soạn thảo edit control bằng cách gọi hàm. SendMessage (hwndEdit, WM_PASTE , 0, 0); Nhận bắt đầu và kết thúc của phần chữ đã chọn bằng cách gọi hàm : SendMessage (hwndEdit, EM_GETSEL, (WPARAM)&iStart, (LPARAM)&iEnd ); iStart lưu vị trí bắt đầu và iEnd lưu ví trí kết thúc.
- Để thay thế phần chữ đã chọn bằng chữ khác, ta dùng hàm ; SendMessage(hwndEdit,EM_REPLACESEL,0,(LPARAM)szString); Trong đó szString là chuỗi muốn thay thế. Đối với edit control nhiều dòng, ta đếm số dòng chữ bằng hàm. iCount = SendMessage (hwndEdit, EM_GETLINECOUNT, 0, 0); Các dòng trong edit control được đánh số bắt thứ tự từ 0. Lấy chiều dài của một dòng bằng lệnh. iLength = SendMessage (hwndEdit, EM_LINELENGTH, iLine, 0). Chép hàng này vào bộ đệm bằng cách gọi hàm. iLength = SendMessage ( hwdEdit, EM_GETLINE, iLine, (LPARAM)Buffer ). LỚP LIST BOX List box là tập hợp các chuỗi kí tự được gói gọn trong một hình chữ nhật. Một chương trình có thể thêm hoặc xóa các chuỗi trong list box bằng cách gởi các thông điệp đến thủ tục window của list box. List box control gởi thông điệp WM_COMMAND đến cửa sổ cha khi có một mục trong list box bị đánh dấu. Cửa sổ cha xác nhận các mục trong list box đã bị đánh dấu. Một list box có thể chọn được một mục hay nhiều mục cùng một lúc (tùy theo loại list box đơn hay kép). Các kiểu List Box Chúng ta tạo một cửa sổ con list box bằng hàm CreateWindow với lớp cửa sổ là "listbox" cùng với loại cửa sổ WS_CHILD. Tuy nhiên kiểu cửa sổ con mặt định này không gởi thông điệp WM_COMMAND đến cửa sổ cha, có nghĩa chương trình tự kiểm tra việc đánh dấu các danh mục trong list box. Vì thế, các kiểu điều khiển list box thường định nghĩa kiểu list box LBS_NOTYFY, điều này cho phép cửa sổ cha nhận thông điệp WM_COMMAND từ list box. Nếu muốn sắp xếp các mục trong list box thì sử dụng kiểu LBS_SORT. Theo mặc định, những list box tạo ra là những list box đơn. Vì thế, nếu muốn tạo ra một list box kép (tức list box cho phép người dùng chọn nhiều dòng cùng lúc) thì phải sử dụng loại list box LBS_MULTIPLESEL.Thông thường, List box sẽ tự cập nhật khi một mục được thêm vào. Tuy nhiên có thể ngăn cản việc cập nhật này
- bằng kiểu LBS_NOREDRAW. Việc làm này đôi khi không thích lắm, thay vào đó chúng ta có thể sử dụng thông điệp WM_SETREDRAW để ngăn chặn tạm thời việc vẽ lại của list box. Theo mặc định, các mục trong list box không có đường viền bao quanh khi hiển thị trên màn hình. Tuy nhiên, có thể thêm đường viền cho các mục bằng định danh cửa sổ WS_BORDER. Thêm thanh cuộn đứng vào list box bằng cách thêm định danh cửa sổ WS_VSCROLL. Thông thường windows định nghĩa một list box gồm các thông số sau : LBS_NOTIFY | LBS_SORT | WS_VSCROLL | WS_BORDER. Ngoài ra còn có các thông số WS_SIZEBOX và WS_CAPTION dùng để thay đổi kích thước và thêm tiêu đề cho list box. Nên tạo ra một list box có chiều rộng bằng chiều dài của chuổi dài nhất trong list box cộng với chiều dài của thanh cuộn dọc. Chiều dài của thanh cuộn dọc được xác định bằng hàm. GetSystemMetrics(SM_CXVCROLL); Đặt các chuỗi vào List Box Để thêm một chuỗi vào list box ta gởi các thông điệp đến thủ tục Windows list box bằng hàm SendMessage. Khi truyền chuỗi cho hàm SendMessage thì thông số wParam là một con trỏ, trỏ đến chuỗi được kết thúc bởi ký tự NULL. Hàm SendMessage trả về mã LB_ERRSPACE (giá trị -2) khi Windows chạy quá không gian bộ nhớ dành cho list box. Hàm SendMessage trả về mã LB_ERR ( -1) khi xảy ra lỗi khác và trả về mã LB_OKAY ( 0 ) nếu thao tác thêm thành công. Nếu sử dụng kiểu LBS_SORT thì khi thêm một chuỗi vào list box chỉ cần dùng chỉ thị LB_ADDSTRING theo cấu trúc. SendMessage(hwndList, LB_ADDSTRING, 0, (LPARAM) szString); Với szString là chuỗi cần thêm vào list box. Nếu trong list box không dùng kiểu LBS_SORT thì có thể chèn một chuỗi với chỉ thị LB_INSERTSTRING cùng vị trí muốn chèn bằng hàm. SendMessage(hwndList, LB_INSERTSTRING, iIndex, (LPARAM) szString); iIndex là vị trí muốn chèn chuỗi vào. Nếu giá trị này bằng -1 thì chuỗi được chèn vào đáy của list box. Xóa một chuỗi trong list box bằng chỉ thị LB_DELETESTRING.
- SendMessage(hwndList, LB_DELETESTRING, iIndex, 0); Xóa hết các phần tử nằm trong list box thì dùng chỉ thị LB_RESETCONTENT với cấu trúc. SendMessage(hwndList, LB_LB_RESETCONTENT, 0, 0 ); Khi thêm vào hay xóa thì Windows tự cập nhật lại list box. Tuy nhiên ta cũng có thể tạm thời cản sự cập nhật này bằng cách tắt cờ vẽ lại list box. SendMessage(hwndList, WMSETREDRAW, FALSE, 0); Sau khi thực hiện xong ta bật cờ vẽ lại list box bằng hàm. SendMessage(hwndList, WMSETREDRAW, TRUE, 0); Chọn và lấy các mục trên List Box Tương tự như đặt chuỗi vào List box , chọn và lấy mục trong List box cũng phải gởi các thông điệp đến thủ tục Window List box bằng hàm SendMessage. Dùng chỉ thị LB_GETCOUNT để đếm số mục trong List box. iCount = SendMessage (hwndList, LB_GETCOUNT, 0, 0 ); Làm sáng mục chọn mặc định thì dùng LB_SETCURSEL. SendMessage (hwndList, LB_SETCURSEL, iIndex, 0 ); Nếu đặt giá trị iIndex bằng -1 thì window sẽ bỏ tất cả các mục chọn. Để chọn các mục dựa trên chữ bắt đầu của mục, ta dùng hàm. iIndex = SendMessage (hwndlist, LB_SELECTSTRING, iIndex, (LPARAM) szSearchString); iIndex là vị trí bắt đầu của việc tìm với kí tự đầu giống szSearchString. Nếu giá trị iIndex bằng -1 thì việc tìm bắt đầu từ vị trí đầu tiên. Hàm sẽ trả về giá trị tìm đượci. Nếu chuỗi không tồn tại thì hàm trả về mã lỗi LB_ERR. Xác định mục đã chọn khi nhận được thông điệp WM_COMMAND từ list box bằng hàm. iIndex = SendMessage(hwndList, LB_GETCURSEL, 0, 0);
- Hàm trả về vị trí của mục được chọn, còn ngược lại nếu không có mục nào được chọn thì hàm trả về mã lỗi LB_ERR. Muốn xác định chiều dài của một chuỗi bất kỳ có trong list box dùng hàm. iLength = SendMessage(hwndList, LB_GETTEXTLEN, iIndex, 0); Với iIndex là ví trí của chuỗi cần xác định chiều dài. Để chép chuỗi trên vào vùng đệp Buffer, ta dùng hàm. iLength = SendMessage(hwndList, LB_GETTEXT, iInde, (LPARAM) Buffer); Giá trị trả về của hai hàm trên là chiều dài của chuỗi ký tự. Nên định kích thước vùng buffer sao cho đủ chứa chiều dài của chuỗi cộng thêm ký tự kết thúc chuỗi cần ghi vào. Tuy nhiên, đối với list box chọn kép thì chúng ta không thể dùng các chỉ thị LB_SETCURSEL, LB_GETCURSEL, hoặc LB_SELECTSTRING. Thay vào đó phải dùng chỉ thị LB_SETSEL để chọn một mục mà không làm ảnh hưởng đến các mục đã chọn khác. SendMessage(hwndList, LB_SETSEL, wParam, iIndex); Tham số wParam khác 0 để chọn và làm sáng mục, bằng 0 để hủy việc chọn. Xác định trạng thái của một mục nào đó trong list box (loại list box chọn kép) dùng hàm. iSelect = SendMessage(hwndList, LB_GETSEL, iIndex, 0); Hàm trả về giá trị khác 0 nếu mục có vị trí iIndex được chọn, và bằng 0 nếu mục ở vị trí đó không được chọn. Nhận các thông điệp từ List Box Khi dùng chuột nhấn vào list box, khi đó list box nhận focus nhập. Cửa sổ cha có thể đặt focus nhập đến list box bằng hàm. SetFocus (hwndList); Khi list box nhận focus nhập, chúng ta dùng con chuột, các phím chữ, phím Spacebar để chọn các mục trong list box. List box gởi thông điệp WM_COMMAND với các thông số wParam, lParam đến cửa sổ cha với ý nghĩa :
- LOWORD (wParam) ID cửa sổ con. HIWORD (wParam) Mã thông báo. lParam Handle cửa sổ con. Mã thông báo Giá Ý nghĩa trị LBN_ERRSPACE -2 Con trol list box chạy quá không gian LBN_SELCHANGE 1 Cho biết mục chọn hiện hành đã thay đổi LBN_DBLCLK 2 Cho biết một mục đã bị double click với chuột LBN_SELCANCEL 3 Cho biết người dùng thay đổi mục chọn trong list box LBN_SETFOCUS 4 Cho biết list box đang nhận được focus nhập LBN_KILLFOCUS 5 Cho biết list box đã mất focus nhập Bảng Các giá trị của mã thông báo Mã thông báo LBN_ERRSPACE, LBN_SELCHANGE được gởi đến cửa sổ cha khi kiểu cửa sổ list box bao gồm LBS_NOTIFY. Một ứng dụng List Box Sau đây là một ví dụ về list box, kết quả chương trình sau khi chạy tTrong ví dụ này, ta tạo ra một list box gồm các phần tử cam, chanh, nho… . Khi dùng chuột hay dùng phím Spacebar cộng với phím mũi tên để chọn các mục trong list box, mục được chọn sẽ có màu tô thể hiện được chọn lựa (mặc định trong Windows là màu xanh) và nội dung mục chọn này được hiển thị lên kiểu điều khiển tĩnh nằm bên trên vùng thao tác của cửa sổ chính. Chương trình minh họa như sau v LISTBOX.CPP (trích dẫn) #include #define ID_LIST 1 #define ID_TEXT 2
- LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM); void FillListBox (HWND hwndList) { int i; static TCHAR *tc[]={TEXT("cam"), TEXT("quyt"), TEXT("buoi"), TEXT("tao"), TEXT("chanh"), TEXT("xoai"), TEXT("nho")}; for(i=0; i
- (HINSTANCE)GetWindowLong(hwnd, GWL_HINSTANCE), NULL ) ; // tạo một control "static" hwndText = CreateWindow ( TEXT("static"), NULL, WS_CHILD | WS_VISIBLE | SS_LEFT, cxChar, cyChar, GetSystemMetrics (SM_CXSCREEN), cyChar, hwnd, (HMENU) ID_TEXT, (HINSTANCE)GetWindowLong(hwnd, GWL_HINSTANCE), NULL) ; FillListBox (hwndList) ; return 0 ; case WM_SETFOCUS : //đặt focus nhập cho list box SetFocus (hwndList) ; return 0 ; //xử lý các thông điệp khi chọn mục trong list box case WM_COMMAND : if (LOWORD (wParam) == ID_LIST && HIWORD (wParam) == LBN_SELCHANGE) { // lấy chỉ ví trí của mục được chọn iIndex=SendMessage(hwndList,LB_GETCURSEL, 0, 0); iLength = SendMessage (hwndList, LB_GETTEXTLEN, iIndex, 0) + 1 ; pVarName =(char*) calloc (iLength, sizeof (TCHAR)) ; SendMessage ( hwndList, LB_GETTEXT, iIndex, (LPARAM)pVarName) ; SetWindowText (hwndText, pVarName) ;
CÓ THỂ BẠN MUỐN DOWNLOAD
-
Lý thuyết lập trình cơ bản - Chương I: Các bộ vi điều khiển 8051
13 p |
2234 |
919
-
Các cấu trúc điều khiển
8 p |
157 |
47
-
Vẽ các đối tượng trong GDI
58 p |
103 |
27
-
C++: Các cấu trúc điều khiển
4 p |
159 |
26
-
Các thao tác điều khiển màn hình
2 p |
68 |
10
-
Bài 09 - Sử dụng các control
8 p |
37 |
8
-
Các cấu trúc điều khiển (phần 1)
43 p |
37 |
7
-
Bài giảng Lập trình hướng đối tượng: Mảng các đối tượng - TS. Nguyễn Mạnh Hùng
18 p |
22 |
7
-
Bài giảng Cơ sở lập trình - Chương 3: Các cấu trúc điều khiển
56 p |
26 |
7
-
Bài giảng Phân tích thiết kế hướng đối tượng: Bài 4.2 - Vũ Thị Dương
13 p |
25 |
6
-
Các cấu trúc điều khiển (phần 2)
30 p |
32 |
6
-
19.1.Canh các đối tượng với nhau
3 p |
54 |
5
-
Bài giảng Ngôn ngữ lập trình C - Chương 5: Các toán tử điều khiển
33 p |
17 |
4
-
Bài giảng Lập trình Windows - Chương 5: Lập trình tài nguyên (2016)
16 p |
6 |
2
-
Bài giảng Tin học chuyên ngành: Chương 4 - Hoàng Xuân Dương
104 p |
19 |
1
-
Bài giảng Phương pháp lập trình - Chương 3: Các cấu trúc điều khiển (2016)
27 p |
4 |
1
-
Phương pháp điều khiển dựa vào việc định lượng đại số gia tử với bảng SAM có điều kiện
7 p |
1 |
1

Set-Cookie: TLDEVNamespace=sc7u0obpev9blbeqmr5hmq7t36; path=/; domain=.tailieu.vn; HttpOnly


text:
Câu hỏi và đáp án kiến thức tổng hợp_Câu hỏi 5
Chia sẻ: Nguyễn Ngọc Tú | Ngày: | Loại File: DOC | Số trang:4
lượt xem 154
download
Câu hỏi và đáp án kiến thức tổng hợp_Câu hỏi 5
Tham khảo tài liệu 'câu hỏi và đáp án kiến thức tổng hợp_câu hỏi 5', khoa học xã hội, lịch sử văn hoá phục vụ nhu cầu học tập, nghiên cứu và làm việc hiệu quả
Bình luận(0) Đăng nhập để gửi bình luận!
Nội dung Text: Câu hỏi và đáp án kiến thức tổng hợp_Câu hỏi 5
- STT Nội dung câu hỏi Đáp án 1 Đàn đáy có mấy đáy? Không có dây 2 Câu lạc bộ bóng đá nào được bình chọn là Real Madrid “câu lạc bộ vĩ đại nhất thế kỷ 20”? 3 Bài thơ “Dương phụ hành” do ai sáng tác? Cao Bá Quát 4 Các nguồn năng lượng hoá thạch như N?ng l??ng t? nhiờn than,dầu,khí đốt được xếp vào nguồn năng lượng gì? 5 ở loài chó, tuyến mồ hôi tập trung hầu hết ở Lưỡi đâu? 6 Bài hát 19-8 là sáng tác của ai? Nhạc sĩ Xuân Oanh 7 Chỉ số tổng hợp cổ phiếu tại sở giao dịch nikkei chứng khoán Tôkyo tên là gì? 8 Bộ luật thành văn cổ nhất nước ta? Hình Thư 9 Tên nhà máy lọc dầu đầu tiên ở nước ta Dung Quất 10 Con chim Kiwi là biểu tưởng của nước nào? Newdilan 11 Khởi nghĩa diễn ra năm 722 do ai lãnh đạo? Mai hắc đế 12 Hành tinh nóng nhất Hệ mặt trời? Sao Kim 13 Bộ tem bưu chính đầu tiên của VN in hình gì? Chân dung Chủ tịch Hồ Chí Minh 14 Ai là người tìm ra peniciline? Fleming 15 Trong phân tử AND có các loại Nucleotit nào? A,T,G,X 16 Động vật lớn nhất thế giới hiện nay? Cá voi xanh 17 1 phân tử mêtan có bao nhiêu nguyên tử 4 Hiđro? 18 Kênh đào Suez nối Địa Trung HảI với biển Biển Đỏ nào? 19 Vua Quang Trung hồi bé có tên là gì? Hồ Thơm 20 Bài’’Rắn đầu biếng học ‘’ do ai viết? Lê Quý Đôn 21 Tổng thống john Kenedy bị ám sát vào năm 1963 nào? 22 Nước ta có tên là Việt Nam dưới thời vua Gia Long nào? 23 Nội dung chủ yếu của bản tuyên ngôn Nhân Bác ái quyền và Dân quyền nước Pháp đưa ra năm 1789 gồm 3 nội dung:tự do,bình đẳng và nội dung nào nữa? 24 Việt Nam chính thức trở thành thành viên của 1998 tổ chức APEC từ năm nào ? 25 Nguyên tố nào có nhiều hợp chất nhất? C (các bon) 26 Điền vào chỗ trống cho hoàn chỉnh câu thơ B?n ph??ng vụ s?n
- của Hồ Chí Minh: Rằng đây bốn biển một nhà ...................... đều là anh em 27 Giải thưởng công nghệ thông tin của Việt Trí tuệ Việt Nam Nam được trao giai vào ngày 1/1 hàng năm có tên là gì? 28 Bài thơ “Người đi tìm hình của nước” của tác Chế Lan Viên giả nào? 29 HCM trước khi ra đi tìm đường cứu nước đã Dục Thanh từng dạy học ở ngôi trường nào ? 30 Địa danh này nằm trên một bán đảo nhô ra Phủ Tây Hồ giữa Hồ Tây.Hàng năm vào rằm Tháng riêng ,khách hành hương về đây rất đông ,đi lễ Mẫu. Đó là địa danh nào? 31 Việt Nam có di sản UNESCO công nhận là di Cồng Chiêng Tây sản văn hoá phi vật thể.Đó là hai di sản nào? nguyên và Nhã nhạc cung đình Húê 32 Giải thưởng Nobel trao cho các nhà khoa học 6 trong bao nhiêu lĩnh vực? 33 Con vật nào thường xuất hiện trong các thí Ruồi Giấm nghiệm sinh học về di truỳên của Moocgan ? 34 Lễ hội được tổ chức tháng 3 âm lịch hàng Giỗ tổ Hùng Vương năm , vấn đề coi lễ hội này là ngày quốc lễ đang gây đựơc sự chú ý của dư luận là lễ hội nào 36 Trong kì quan của thế giới , kì quan nào còn Kim tự tháp Ai Cập tồn tại đến bây giờ 37 Ngày thành lập Liên Hợp Quốc 20 – 10 – 1945 38 Ngày thành lập ASEAN 8 – 8 – 1967 42 Sân bay lớn nhất Đông Nam á hiện nay thuộc Malaysia quốc gia nào? 43 Từ năm 1930 đến nay, có mấy lần không tổ 2 lần chức vòng chung kết bóng đá woldcup? 46 Tuyên ngôn của ĐCS ra đời năm 1848 kết Vô sản tất cả các thúc bằng câu nói nổi tiếng nào? nước liên hiệp lại! (đoàn kết lại) 47 Thành phần chính của Cát là gì? Si 48 Tỉnh đầu tiên đạt sản lượng 5tấn/1ha? Thái Bình 51 Bản trường ca đầu tiên của nền thi ca hiện Trường ca”Theo đại VN viết về Bác Hồ? chân Bác”. 52 Công trình thủy lợi Hồ Kẻ Gỗ thuộc địa bàn Hà Tĩnh nào?Tỉnh nào? 53 Vải sa tanh được dệt từ loại sợi nào? Sợi nhân tạo 54 Khoảng một triệu năm về trước, một phần bề Băng
- mặt trái đất chím trong hai dặm của chất gì? 55 Con vật được nói nhiều nhất trong sách kinh Con Cừu(Con chiên) thánh? 56 Con vật gì được xem là Quốc Thú ở NêPan? Con Bò( hàng năm ở nước này có tế Kính bò 57 Loại mưa nào hình thành từ những trân mưa Mưa tuyết trong không khí? 58 Con vật bay to lớn nhất sống cùng thời với Thằn lằn bay khủng long được gọi tên là gì? 59 Chất có khả năng tác dụng với axit và bazo không có phải là chất lưỡng tính không? 61 Bệnh AIDS được phát hiện đầu tiên vào năm 1981 nào? 62 Bộ trưởng thương mại nước ta là ai? Trương Đình Tuyển 63 Unesco là tên viết tắt của tổ chức nào? Tổ chức di sản văn hoá TG 64 Nước đã phát minh ra kỹ thuật làm giấy? Trung Quốc 65 Tổ chức LHQ hiện nay có bao nhiêu thành 192 viên 66 Tên gọi Việt Nam có từ năm nào 1804 nhà Nguyễn 67 Đồng tiền Kim loại đầu tiên làm bằng chất Bằng đồng liệu gì? 68 Hoài Thanh nói ai là “người của hai thế kỷ? Tản Đà 69 Loại sợi tổnghợp đầu tiên trên thế giới tên là NiLông gì? 71 Việt Nam gia nhập hội đồng tương trợ kinh tế 29.6.1978 các nước XHCN (SEV) vào năm nào 73 Cuộc cách mạng công ngiệp ở nước Anh băt Dệt nguồn từ ngành công nghiệp nào? 74 Bề rộng của băng từ được chia làm mấy rãnh 4 ghi? 75 Trong môn bóng rổ,khi vận động viên ném rổ 3 điểm ở khoảng cách 6,25m sẽ được bao nhiêu điểm? 76 Tác phẩm Đisan mặt đất là thần thoại của Lô Lô dân tộc nào? 77 Tên của tôn giáo cổ xưa nhất trên thế giới? ấn độ giáo 79 Christob colomb đã khám phá ra châu Mỹ vào 1492 năm nào? 80 Eo biển mangielăng nằm ở đâu? Nam Mỹ 81 Theo Các Mác vật liệu của nghệ thuật HiLạp Thần Thoại Hi Lạp
- là gì? 82 Nằm trong cùng vĩ độ nhưng nứơc biển ở Do dòng nước nóng Đông Nam châu Phi nóng hơn Tây Nam tới hơn 10 độ? Vì sao? 83 Tên bộ phim màn đầu tiên đoạt giải oscar? Phim Cuốn theo chiều gió. 84 Trong đám tang đưa cụ tổ ?Cụ cố Hồng đã Biết rồi khổ lắm nói nói 1872 câu gì? mãi. 85 Cuối triều nhà Lý dưới sự sắp xếp của Trấn Lý Huệ Tông Thủ Độ, ai đã pahỉ nhường ngôi cho con gái và lên làm thái thượng hoàng? 86 Hệ thống sông nào có trên 90% diện tích lưu Sông mê kông vực nằm bên ngoài nước ta? 88 Lưỡng hà nhằm chỉ khu vực nào trên thế giới? Tây á 89 Hệ thống thành và cung điện ở kinh thành Hướng nam Huế quay về hướng nào? 90 Chủ tịch Quốc hội đầu tiên của nước ta là ai? Nguyễn Văn Tố 91 10 Tỉnh Nam Bộ có cùng tên một huyện?Bạn Châu Thành cho biết đó là huyện gì? 92 Chất có khả năng hoà tan chất khác gọi là gì? DungMôi 93 Cơ quan khứu giác của cá voi nằm ở đâu? Cá voi không có cơ quan khứu giác 94 Đường hầm xuyên eo biển Manche nối liền 2 Anh+ Pháp quốc gia nào? 95 Cuộc khởi nghĩa nổ ra năm 40 ỏ Mêlinh do ai Hai Bà Trung lãnh đạo? 96 Trong kháng chiến chống Mỹ Ơ Miền Bắc có Năm Xung Phong phong trào ba sẵn sàng thì ở miền nam có phong trào gì? 97 Bộ tiểu thuyết sử thi lớn nhất thế giới có tên là Chiến tranh và Hòa gì? Binh với hơn 500nhân vật 98 Các cao nguyên ở Tây Nguyên hầu hết được Đất đỏ Bazan bao phủ bởi loại đất gì? 99 Cấu trúc của một bài Cáo thường có mấy 4 phần? 100 Bào quan nào tạo ra thoi vô sắc? Trung thể
CÓ THỂ BẠN MUỐN DOWNLOAD
-
Ebook Hỏi đáp về văn hóa phong tục người Việt
91 p | 1627 | 1200
-
Câu hỏi kiến thức tổng hợp
27 p | 1340 | 387
-
Câu hỏi và đáp án kiến thức tổng hợp_Câu hỏi 6
5 p | 292 | 133
-
500 CÂU HỎI TRẮC NGHIỆM KIẾN THỨC TỔNG HỢP DÀNH CHO ĐOÀN VIÊN
51 p | 490 | 120
-
Câu hỏi và đáp án kiến thức tổng hợp_Câu hỏi 9
11 p | 229 | 118
-
Ebook Văn hóa lối sống của người theo Hồi Giáo: Phần 1 - Nguyễn Mạnh Cường
232 p | 110 | 58
-
Đề thi và Đáp án môn Cơ sở văn hóa Việt Nam
2 p | 390 | 56
-
Tìm hiểu về lịch sử thế giới cận đại
565 p | 97 | 50
-
Ebook Hỏi đáp về ẩm thực, trang phục Hà Nội xưa và nay: Phần 1 - Trần Thị Hà
93 p | 79 | 31
-
Ebook Hỏi đáp về ẩm thực, trang phục Hà Nội xưa và nay: Phần 2 - Trần Thị Hà
97 p | 67 | 27
-
Ebook Đại thắng mùa xuân (Sự kiện - Hỏi và Đáp): Phần 1 - NXB Chính trị quốc gia
136 p | 35 | 15
-
Ebook Đại thắng mùa xuân (Sự kiện - Hỏi và Đáp): Phần 2 - NXB Chính trị quốc gia
142 p | 52 | 12
-
Vấn đề bảo tồn và phát huy giá trị của lễ hội truyền thống: Thảo luận về một số khái niệm cơ bản - Nguyễn Văn Huy
11 p | 38 | 12
-
Kiến thức trở thành hàng hóa
7 p | 43 | 4
-
BÀI GIẢNG: CHIẾN TRANH THẾ GIỚI THỨ HAI
10 p | 29 | 4
-
Ảnh hưởng của yếu tố xã hội và văn hóa đến an ninh lương thực của người Thái
9 p | 14 | 3
-
Không hiểu sử nước nhà là “bất hạnh”
0 p | 26 | 2

markdown:
# Câu hỏi và đáp án kiến thức tổng hợp_Câu hỏi 5
Chia sẻ: Nguyễn Ngọc Tú | Ngày: | Loại File: DOC | Số trang:4
lượt xem 154
download
![](http://image.tlvnimg.com/document/thumbnail/2010/20100621/jsngoctu_kt/80x100/cau_hoi_5_0329.jpg)
##
Câu hỏi và đáp án kiến thức tổng hợp_Câu hỏi 5
[Vui lòng tải xuống để xem tài liệu đầy đủ](javascript:void(0);)
Download
![](http://static.tlvnimg.com/b2013az/templates/version1/default/images/down16x21.png)
Tham khảo tài liệu 'câu hỏi và đáp án kiến thức tổng hợp_câu hỏi 5', khoa học xã hội, lịch sử văn hoá phục vụ nhu cầu học tập, nghiên cứu và làm việc hiệu quả
Bình luận(0)
[Đăng nhập để gửi bình luận!](javascript:void(0);)
##
Nội dung Text: Câu hỏi và đáp án kiến thức tổng hợp_Câu hỏi 5
- STT Nội dung câu hỏi Đáp án 1 Đàn đáy có mấy đáy? Không có dây 2 Câu lạc bộ bóng đá nào được bình chọn là Real Madrid “câu lạc bộ vĩ đại nhất thế kỷ 20”? 3 Bài thơ “Dương phụ hành” do ai sáng tác? Cao Bá Quát 4 Các nguồn năng lượng hoá thạch như N?ng l??ng t? nhiờn than,dầu,khí đốt được xếp vào nguồn năng lượng gì? 5 ở loài chó, tuyến mồ hôi tập trung hầu hết ở Lưỡi đâu? 6 Bài hát 19-8 là sáng tác của ai? Nhạc sĩ Xuân Oanh 7 Chỉ số tổng hợp cổ phiếu tại sở giao dịch nikkei chứng khoán Tôkyo tên là gì? 8 Bộ luật thành văn cổ nhất nước ta? Hình Thư 9 Tên nhà máy lọc dầu đầu tiên ở nước ta Dung Quất 10 Con chim Kiwi là biểu tưởng của nước nào? Newdilan 11 Khởi nghĩa diễn ra năm 722 do ai lãnh đạo? Mai hắc đế 12 Hành tinh nóng nhất Hệ mặt trời? Sao Kim 13 Bộ tem bưu chính đầu tiên của VN in hình gì? Chân dung Chủ tịch Hồ Chí Minh 14 Ai là người tìm ra peniciline? Fleming 15 Trong phân tử AND có các loại Nucleotit nào? A,T,G,X 16 Động vật lớn nhất thế giới hiện nay? Cá voi xanh 17 1 phân tử mêtan có bao nhiêu nguyên tử 4 Hiđro? 18 Kênh đào Suez nối Địa Trung HảI với biển Biển Đỏ nào? 19 Vua Quang Trung hồi bé có tên là gì? Hồ Thơm 20 Bài’’Rắn đầu biếng học ‘’ do ai viết? Lê Quý Đôn 21 Tổng thống john Kenedy bị ám sát vào năm 1963 nào? 22 Nước ta có tên là Việt Nam dưới thời vua Gia Long nào? 23 Nội dung chủ yếu của bản tuyên ngôn Nhân Bác ái quyền và Dân quyền nước Pháp đưa ra năm 1789 gồm 3 nội dung:tự do,bình đẳng và nội dung nào nữa? 24 Việt Nam chính thức trở thành thành viên của 1998 tổ chức APEC từ năm nào ? 25 Nguyên tố nào có nhiều hợp chất nhất? C (các bon) 26 Điền vào chỗ trống cho hoàn chỉnh câu thơ B?n ph??ng vụ s?n
- của Hồ Chí Minh: Rằng đây bốn biển một nhà ...................... đều là anh em 27 Giải thưởng công nghệ thông tin của Việt Trí tuệ Việt Nam Nam được trao giai vào ngày 1/1 hàng năm có tên là gì? 28 Bài thơ “Người đi tìm hình của nước” của tác Chế Lan Viên giả nào? 29 HCM trước khi ra đi tìm đường cứu nước đã Dục Thanh từng dạy học ở ngôi trường nào ? 30 Địa danh này nằm trên một bán đảo nhô ra Phủ Tây Hồ giữa Hồ Tây.Hàng năm vào rằm Tháng riêng ,khách hành hương về đây rất đông ,đi lễ Mẫu. Đó là địa danh nào? 31 Việt Nam có di sản UNESCO công nhận là di Cồng Chiêng Tây sản văn hoá phi vật thể.Đó là hai di sản nào? nguyên và Nhã nhạc cung đình Húê 32 Giải thưởng Nobel trao cho các nhà khoa học 6 trong bao nhiêu lĩnh vực? 33 Con vật nào thường xuất hiện trong các thí Ruồi Giấm nghiệm sinh học về di truỳên của Moocgan ? 34 Lễ hội được tổ chức tháng 3 âm lịch hàng Giỗ tổ Hùng Vương năm , vấn đề coi lễ hội này là ngày quốc lễ đang gây đựơc sự chú ý của dư luận là lễ hội nào 36 Trong kì quan của thế giới , kì quan nào còn Kim tự tháp Ai Cập tồn tại đến bây giờ 37 Ngày thành lập Liên Hợp Quốc 20 – 10 – 1945 38 Ngày thành lập ASEAN 8 – 8 – 1967 42 Sân bay lớn nhất Đông Nam á hiện nay thuộc Malaysia quốc gia nào? 43 Từ năm 1930 đến nay, có mấy lần không tổ 2 lần chức vòng chung kết bóng đá woldcup? 46 Tuyên ngôn của ĐCS ra đời năm 1848 kết Vô sản tất cả các thúc bằng câu nói nổi tiếng nào? nước liên hiệp lại! (đoàn kết lại) 47 Thành phần chính của Cát là gì? Si 48 Tỉnh đầu tiên đạt sản lượng 5tấn/1ha? Thái Bình 51 Bản trường ca đầu tiên của nền thi ca hiện Trường ca”Theo đại VN viết về Bác Hồ? chân Bác”. 52 Công trình thủy lợi Hồ Kẻ Gỗ thuộc địa bàn Hà Tĩnh nào?Tỉnh nào? 53 Vải sa tanh được dệt từ loại sợi nào? Sợi nhân tạo 54 Khoảng một triệu năm về trước, một phần bề Băng
- mặt trái đất chím trong hai dặm của chất gì? 55 Con vật được nói nhiều nhất trong sách kinh Con Cừu(Con chiên) thánh? 56 Con vật gì được xem là Quốc Thú ở NêPan? Con Bò( hàng năm ở nước này có tế Kính bò 57 Loại mưa nào hình thành từ những trân mưa Mưa tuyết trong không khí? 58 Con vật bay to lớn nhất sống cùng thời với Thằn lằn bay khủng long được gọi tên là gì? 59 Chất có khả năng tác dụng với axit và bazo không có phải là chất lưỡng tính không? 61 Bệnh AIDS được phát hiện đầu tiên vào năm 1981 nào? 62 Bộ trưởng thương mại nước ta là ai? Trương Đình Tuyển 63 Unesco là tên viết tắt của tổ chức nào? Tổ chức di sản văn hoá TG 64 Nước đã phát minh ra kỹ thuật làm giấy? Trung Quốc 65 Tổ chức LHQ hiện nay có bao nhiêu thành 192 viên 66 Tên gọi Việt Nam có từ năm nào 1804 nhà Nguyễn 67 Đồng tiền Kim loại đầu tiên làm bằng chất Bằng đồng liệu gì? 68 Hoài Thanh nói ai là “người của hai thế kỷ? Tản Đà 69 Loại sợi tổnghợp đầu tiên trên thế giới tên là NiLông gì? 71 Việt Nam gia nhập hội đồng tương trợ kinh tế 29.6.1978 các nước XHCN (SEV) vào năm nào 73 Cuộc cách mạng công ngiệp ở nước Anh băt Dệt nguồn từ ngành công nghiệp nào? 74 Bề rộng của băng từ được chia làm mấy rãnh 4 ghi? 75 Trong môn bóng rổ,khi vận động viên ném rổ 3 điểm ở khoảng cách 6,25m sẽ được bao nhiêu điểm? 76 Tác phẩm Đisan mặt đất là thần thoại của Lô Lô dân tộc nào? 77 Tên của tôn giáo cổ xưa nhất trên thế giới? ấn độ giáo 79 Christob colomb đã khám phá ra châu Mỹ vào 1492 năm nào? 80 Eo biển mangielăng nằm ở đâu? Nam Mỹ 81 Theo Các Mác vật liệu của nghệ thuật HiLạp Thần Thoại Hi Lạp
- là gì? 82 Nằm trong cùng vĩ độ nhưng nứơc biển ở Do dòng nước nóng Đông Nam châu Phi nóng hơn Tây Nam tới hơn 10 độ? Vì sao? 83 Tên bộ phim màn đầu tiên đoạt giải oscar? Phim Cuốn theo chiều gió. 84 Trong đám tang đưa cụ tổ ?Cụ cố Hồng đã Biết rồi khổ lắm nói nói 1872 câu gì? mãi. 85 Cuối triều nhà Lý dưới sự sắp xếp của Trấn Lý Huệ Tông Thủ Độ, ai đã pahỉ nhường ngôi cho con gái và lên làm thái thượng hoàng? 86 Hệ thống sông nào có trên 90% diện tích lưu Sông mê kông vực nằm bên ngoài nước ta? 88 Lưỡng hà nhằm chỉ khu vực nào trên thế giới? Tây á 89 Hệ thống thành và cung điện ở kinh thành Hướng nam Huế quay về hướng nào? 90 Chủ tịch Quốc hội đầu tiên của nước ta là ai? Nguyễn Văn Tố 91 10 Tỉnh Nam Bộ có cùng tên một huyện?Bạn Châu Thành cho biết đó là huyện gì? 92 Chất có khả năng hoà tan chất khác gọi là gì? DungMôi 93 Cơ quan khứu giác của cá voi nằm ở đâu? Cá voi không có cơ quan khứu giác 94 Đường hầm xuyên eo biển Manche nối liền 2 Anh+ Pháp quốc gia nào? 95 Cuộc khởi nghĩa nổ ra năm 40 ỏ Mêlinh do ai Hai Bà Trung lãnh đạo? 96 Trong kháng chiến chống Mỹ Ơ Miền Bắc có Năm Xung Phong phong trào ba sẵn sàng thì ở miền nam có phong trào gì? 97 Bộ tiểu thuyết sử thi lớn nhất thế giới có tên là Chiến tranh và Hòa gì? Binh với hơn 500nhân vật 98 Các cao nguyên ở Tây Nguyên hầu hết được Đất đỏ Bazan bao phủ bởi loại đất gì? 99 Cấu trúc của một bài Cáo thường có mấy 4 phần? 100 Bào quan nào tạo ra thoi vô sắc? Trung thể
CÓ THỂ BẠN MUỐN DOWNLOAD
-
Ebook Hỏi đáp về văn hóa phong tục người Việt
91 p |
1627 |
1200
-
Câu hỏi kiến thức tổng hợp
27 p |
1340 |
387
-
Câu hỏi và đáp án kiến thức tổng hợp_Câu hỏi 6
5 p |
292 |
133
-
500 CÂU HỎI TRẮC NGHIỆM KIẾN THỨC TỔNG HỢP DÀNH CHO ĐOÀN VIÊN
51 p |
490 |
120
-
Câu hỏi và đáp án kiến thức tổng hợp_Câu hỏi 9
11 p |
229 |
118
-
Ebook Văn hóa lối sống của người theo Hồi Giáo: Phần 1 - Nguyễn Mạnh Cường
232 p |
110 |
58
-
Đề thi và Đáp án môn Cơ sở văn hóa Việt Nam
2 p |
390 |
56
-
Tìm hiểu về lịch sử thế giới cận đại
565 p |
97 |
50
-
Ebook Hỏi đáp về ẩm thực, trang phục Hà Nội xưa và nay: Phần 1 - Trần Thị Hà
93 p |
79 |
31
-
Ebook Hỏi đáp về ẩm thực, trang phục Hà Nội xưa và nay: Phần 2 - Trần Thị Hà
97 p |
67 |
27
-
Ebook Đại thắng mùa xuân (Sự kiện - Hỏi và Đáp): Phần 1 - NXB Chính trị quốc gia
136 p |
35 |
15
-
Ebook Đại thắng mùa xuân (Sự kiện - Hỏi và Đáp): Phần 2 - NXB Chính trị quốc gia
142 p |
52 |
12
-
Vấn đề bảo tồn và phát huy giá trị của lễ hội truyền thống: Thảo luận về một số khái niệm cơ bản - Nguyễn Văn Huy
11 p |
38 |
12
-
Kiến thức trở thành hàng hóa
7 p |
43 |
4
-
BÀI GIẢNG: CHIẾN TRANH THẾ GIỚI THỨ HAI
10 p |
29 |
4
-
Ảnh hưởng của yếu tố xã hội và văn hóa đến an ninh lương thực của người Thái
9 p |
14 |
3
-
Không hiểu sử nước nhà là “bất hạnh”
0 p |
26 |
2

WARC-Type: response

Content-Type: application/http; msgtype=response

WARC-Identified-Payload-Type: application/xhtml+xml

Server: Apache/2.2.31 (CentOS)

Connection: close

Pragma: no-cache

Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0

Set-Cookie: TLDEVNamespace=m7hc37kd8g5p0ptjjivlvd1nh5; path=/; domain=.tailieu.vn; HttpOnly

Vary: Accept-Encoding

Content-Type: text/html; charset=UTF-8


text:
Đồ ngọt có là “hung thần” với người bệnh đái tháo đường?
Chia sẻ: Nguhoiphan Nguhoiphan | Ngày: | Loại File: PDF | Số trang:6
lượt xem 10
download
Đồ ngọt có là “hung thần” với người bệnh đái tháo đường?
Bệnh nhân ĐTĐ không nên ăn nhiều bánh ngọt Trước đây, bệnh nhân ĐTĐ thường được cảnh báo hoàn toàn tránh ăn đường. Một số người còn nghĩ rằng ăn đường gây ra bệnh ĐTĐ. Giờ đây, những suy nghĩ như vậy không còn đúng nữa. “Ăn khoai tây luộc còn làm tăng đường máu nhiều hơn so với ăn đường kính khi dùng cùng một số calo như nhau. Điều tương tự cũng xảy ra với việc ăn cơm và bột mỳ trắng”. Ngày nay, có nhiều thực phẩm chế biến sẵn, trên bảng thành phần thường ghi tổng...
Bình luận(0) Đăng nhập để gửi bình luận!
CÓ THỂ BẠN MUỐN DOWNLOAD

markdown:
# Đồ ngọt có là “hung thần” với người bệnh đái tháo đường?
Chia sẻ: Nguhoiphan Nguhoiphan | Ngày: | Loại File: PDF | Số trang:6
lượt xem 10
download
![](http://image1.tailieu.vn/document/thumbnail/2010/20100824/nguhoiphan/80x100/do_ngot_co_la_hung_than_302.jpg)
##
Đồ ngọt có là “hung thần” với người bệnh đái tháo đường?
[Vui lòng tải xuống để xem tài liệu đầy đủ](javascript:void(0);)
Download
![](http://static1.tailieu.vn/b2013az/templates/version1/default/images/down16x21.png)
Bệnh nhân ĐTĐ không nên ăn nhiều bánh ngọt Trước đây, bệnh nhân ĐTĐ thường được cảnh báo hoàn toàn tránh ăn đường. Một số người còn nghĩ rằng ăn đường gây ra bệnh ĐTĐ. Giờ đây, những suy nghĩ như vậy không còn đúng nữa. “Ăn khoai tây luộc còn làm tăng đường máu nhiều hơn so với ăn đường kính khi dùng cùng một số calo như nhau. Điều tương tự cũng xảy ra với việc ăn cơm và bột mỳ trắng”. Ngày nay, có nhiều thực phẩm chế biến sẵn, trên bảng thành phần thường ghi tổng...
Bình luận(0)
[Đăng nhập để gửi bình luận!](javascript:void(0);)
CÓ THỂ BẠN MUỐN DOWNLOAD

Set-Cookie: TLDEVNamespace=apl5kuk1d4nppv4vkctkhqqab1; path=/; domain=.tailieu.vn; HttpOnly