<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                # Windows API 控件 II > 原文: [http://zetcode.com/gui/winapi/controlsII/](http://zetcode.com/gui/winapi/controlsII/) 我們繼續使用 Windows 控件。 我們將展示如何使用跟蹤欄,工具提示和月歷控件。 ## 跟蹤欄 跟蹤欄是一個包含滑塊和可選刻度線的窗口。 我們使用鼠標或鍵盤移動滑塊。 跟蹤欄用于從一系列連續值中選擇離散值。 在其他平臺上,此控件稱為滑塊。 `trackbar.c` ```c #include <windows.h> #include <commctrl.h> LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); void CreateControls(HWND hwnd); void UpdateLabel(void); HWND hTrack; HWND hlbl; int WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PWSTR lpCmdLine, int nCmdShow) { HWND hwnd; MSG msg ; WNDCLASSW wc = {0}; wc.lpszClassName = L"Trackbar"; wc.hInstance = hInstance; wc.hbrBackground = GetSysColorBrush(COLOR_3DFACE); wc.lpfnWndProc = WndProc; wc.hCursor = LoadCursor(0,IDC_ARROW); RegisterClassW(&wc); hwnd = CreateWindowW(wc.lpszClassName, L"Trackbar", WS_OVERLAPPEDWINDOW | WS_VISIBLE, 100, 100, 350, 180, 0, 0, hInstance, 0); while (GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); } return (int) msg.wParam; } LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) { switch(msg) { case WM_CREATE: CreateControls(hwnd); break; case WM_HSCROLL: UpdateLabel(); break; case WM_DESTROY: PostQuitMessage(0); break; } return DefWindowProcW(hwnd, msg, wParam, lParam); } void CreateControls(HWND hwnd) { HWND hLeftLabel = CreateWindowW(L"Static", L"0", WS_CHILD | WS_VISIBLE, 0, 0, 10, 30, hwnd, (HMENU)1, NULL, NULL); HWND hRightLabel = CreateWindowW(L"Static", L"100", WS_CHILD | WS_VISIBLE, 0, 0, 30, 30, hwnd, (HMENU)2, NULL, NULL); hlbl = CreateWindowW(L"Static", L"0", WS_CHILD | WS_VISIBLE, 270, 20, 30, 30, hwnd, (HMENU)3, NULL, NULL); INITCOMMONCONTROLSEX icex; icex.dwSize = sizeof(INITCOMMONCONTROLSEX); icex.dwICC = ICC_LISTVIEW_CLASSES; InitCommonControlsEx(&icex); hTrack = CreateWindowW(TRACKBAR_CLASSW, L"Trackbar Control", WS_CHILD | WS_VISIBLE | TBS_AUTOTICKS, 20, 20, 170, 30, hwnd, (HMENU) 3, NULL, NULL); SendMessageW(hTrack, TBM_SETRANGE, TRUE, MAKELONG(0, 100)); SendMessageW(hTrack, TBM_SETPAGESIZE, 0, 10); SendMessageW(hTrack, TBM_SETTICFREQ, 10, 0); SendMessageW(hTrack, TBM_SETPOS, FALSE, 0); SendMessageW(hTrack, TBM_SETBUDDY, TRUE, (LPARAM) hLeftLabel); SendMessageW(hTrack, TBM_SETBUDDY, FALSE, (LPARAM) hRightLabel); } void UpdateLabel(void) { LRESULT pos = SendMessageW(hTrack, TBM_GETPOS, 0, 0); wchar_t buf[4]; wsprintfW(buf, L"%ld", pos); SetWindowTextW(hlbl, buf); } ``` 在我們的示例中,我們顯示帶有三個靜態文本控件的跟蹤欄控件。 其中兩個連接在跟蹤欄的左側和右側。 他們被稱為伙伴。 通過拖動滑塊,我們可以更改第三個靜態控件的文本。 ```c HWND hLeftLabel = CreateWindowW(L"Static", L"0", WS_CHILD | WS_VISIBLE, 0, 0, 10, 30, hwnd, (HMENU)1, NULL, NULL); HWND hRightLabel = CreateWindowW(L"Static", L"100", WS_CHILD | WS_VISIBLE, 0, 0, 30, 30, hwnd, (HMENU)2, NULL, NULL); hlbl = CreateWindowW(L"Static", L"0", WS_CHILD | WS_VISIBLE, 270, 20, 30, 30, hwnd, (HMENU)3, NULL, NULL); ``` 創建了三個靜態控件。 兩個控件將顯示跟蹤欄控件的最小值和最大值。 最后一個將顯示當前選定的值。 ```c INITCOMMONCONTROLSEX icex; icex.dwSize = sizeof(INITCOMMONCONTROLSEX); icex.dwICC = ICC_LISTVIEW_CLASSES; InitCommonControlsEx(&icex); ``` 如果要使用公共控件之一,則需要加載公共控件 DLL(`comctl32.dll`)并從 DLL 中注冊特定的公共控件類。 在創建通用控件之前,`InitCommonControlsEx()`必須調用此函數。 ```c hTrack = CreateWindowW(TRACKBAR_CLASSW, L"Trackbar Control", WS_CHILD | WS_VISIBLE | TBS_AUTOTICKS, 20, 20, 170, 30, hwnd, (HMENU) 3, NULL, NULL); ``` `TRACKBAR_CLASSW`用于創建軌跡欄控件。 `TBS_AUTOTICKS`樣式會為其值范圍內的每個增量創建一個刻度線。 ```c SendMessageW(hTrack, TBM_SETRANGE, TRUE, MAKELONG(0, 100)); SendMessageW(hTrack, TBM_SETPAGESIZE, 0, 10); SendMessageW(hTrack, TBM_SETTICFREQ, 10, 0); SendMessageW(hTrack, TBM_SETPOS, FALSE, 0); ``` 跟蹤欄控件尚未完成。 我們向控件發送四個消息。 我們發送`TBM_SETRANGE`設置軌跡欄范圍。 要設置頁面大小,我們發送`TBM_SETPAGESIZE`消息。 要設置刻度頻率,我們發送`TBM_SETTICFREQ`消息。 要設置當前滑塊位置,我們發送`TBM_SETPOS`。 ```c SendMessageW(hTrack, TBM_SETBUDDY, TRUE, (LPARAM) hLeftLabel); SendMessageW(hTrack, TBM_SETBUDDY, FALSE, (LPARAM) hRightLabel); ``` 我們通過發送`TBM_SETBUDDY`消息來設置軌跡欄好友。 第三個參數將決定伙伴是位于控件的左側(`TRUE`)還是右側(`FALSE`)。 ```c case WM_HSCROLL: UpdateLabel(); break; ``` 當我們移動軌跡欄滑塊時,窗口過程將收到`WM_HSCROLL`消息。 (如果是水平跟蹤欄。) ```c void UpdateLabel(void) { LRESULT pos = SendMessageW(hTrack, TBM_GETPOS, 0, 0); wchar_t buf[4]; wsprintfW(buf, L"%ld", pos); SetWindowTextW(hlbl, buf); } ``` 在`UpdateLabel()`函數中,我們通過發送`TMB_GETPOS`消息來獲得當前滑塊的位置。 使用`wsprintfW()`函數將接收到的值轉換為文本。 最后,通過`SetWindowTextW()`函數設置靜態控件的文本。 ![Trackbar](https://img.kancloud.cn/75/13/7513a2c572746fa0faef568ae8d852c7_350x180.jpg) 圖:跟蹤欄 ## 工具提示 工具提示是常見的圖形用戶元素。 工具提示大部分時間都是隱藏的。 這是一個小框,當鼠標指針經過時會出現在 GUI 對象附近。 它顯示一條簡短的消息,說明該對象。 工具提示是應用幫助系統的一部分。 `tooltip.c` ```c #include <windows.h> #include <commctrl.h> LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); void CreateMyTooltip(HWND); int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { MSG msg; WNDCLASS wc = {0}; wc.lpszClassName = "Tooltip"; wc.hInstance = hInstance; wc.hbrBackground = GetSysColorBrush(COLOR_3DFACE); wc.lpfnWndProc = WndProc; wc.hCursor = LoadCursor(0, IDC_ARROW); RegisterClass(&wc); CreateWindow(wc.lpszClassName, "Tooltip", WS_OVERLAPPEDWINDOW | WS_VISIBLE, 100, 100, 200, 150, 0, 0, hInstance, 0); while (GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); } return (int) msg.wParam; } LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) { switch(msg) { case WM_CREATE: CreateMyTooltip(hwnd); break; case WM_DESTROY: PostQuitMessage(0); break; } return DefWindowProc(hwnd, msg, wParam, lParam); } void CreateMyTooltip(HWND hwnd) { INITCOMMONCONTROLSEX iccex; HWND hwndTT; TOOLINFO ti; char tooltip[30] = "A main window"; RECT rect; iccex.dwICC = ICC_WIN95_CLASSES; iccex.dwSize = sizeof(INITCOMMONCONTROLSEX); InitCommonControlsEx(&iccex); hwndTT = CreateWindowEx(WS_EX_TOPMOST, TOOLTIPS_CLASS, NULL, WS_POPUP | TTS_NOPREFIX | TTS_ALWAYSTIP, 0, 0, 0, 0, hwnd, NULL, NULL, NULL ); SetWindowPos(hwndTT, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE); GetClientRect(hwnd, &rect); ti.cbSize = sizeof(TOOLINFO); ti.uFlags = TTF_SUBCLASS; ti.hwnd = hwnd; ti.hinst = NULL; ti.uId = 0; ti.lpszText = tooltip; ti.rect.left = rect.left; ti.rect.top = rect.top; ti.rect.right = rect.right; ti.rect.bottom = rect.bottom; SendMessage(hwndTT, TTM_ADDTOOL, 0, (LPARAM) (LPTOOLINFO) &ti); } ``` 在我們的示例中,我們為主窗口設置了一個工具提示。 ```c INITCOMMONCONTROLSEX iccex; ... iccex.dwICC = ICC_WIN95_CLASSES; iccex.dwSize = sizeof(INITCOMMONCONTROLSEX); InitCommonControlsEx(&iccex); ``` 工具提示是通用控件的一部分,因此,我們必須初始化通用控件。 工具提示的創建包含幾個步驟。 我們必須創建一個工具提示窗口。 然后我們將其設置為最頂層的窗口,這樣它就不會被另一個窗口覆蓋。 我們創建一個工具提示文本和`TOOLTIPINFO`結構。 該結構必須填充重要信息。 窗口句柄,工具提示文本和矩形將覆蓋我們的工具提示。 在我們的示例中,我們的工具提示將覆蓋窗口的整個客戶區域。 ```c SendMessage(hwndTT, TTM_ADDTOOL, 0, (LPARAM) (LPTOOLINFO) &ti); ``` 在發送`TTM_ADDTOOL`消息后,工具提示確實添加到了窗口中。 ![Tooltip control](https://img.kancloud.cn/e6/06/e606757f8cde98a22ab9bb884bef0d95_200x150.jpg) 圖:工具提示 control ## Updown 控件 Updown 控件(也稱為旋轉控件)將一對顯示為箭頭的按鈕與一個好友編輯控件結合在一起。 單擊箭頭可增加或減少編輯控件中的值。 Updown 控件是使用`UPDOWN_CLASSW`窗口類創建的。 `updown.c` ```c #include <windows.h> #include <commctrl.h> #include <strsafe.h> #define ID_UPDOWN 1 #define ID_EDIT 2 #define ID_STATIC 3 #define UD_MAX_POS 30 #define UD_MIN_POS 0 LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); void CreateControls(HWND); HWND hUpDown, hEdit, hStatic; int WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PWSTR lpCmdLine, int nCmdShow) { MSG msg; WNDCLASSW wc = {0}; wc.style = CS_HREDRAW | CS_VREDRAW; wc.lpszClassName = L"Updown control"; wc.hInstance = hInstance; wc.hbrBackground = GetSysColorBrush(COLOR_3DFACE); wc.lpfnWndProc = WndProc; wc.hCursor = LoadCursor(0, IDC_ARROW); RegisterClassW(&wc); CreateWindowW(wc.lpszClassName, L"Updown control", WS_OVERLAPPEDWINDOW | WS_VISIBLE, 100, 100, 280, 200, NULL, NULL, hInstance, NULL); while (GetMessage(&msg, NULL, 0, 0)) { DispatchMessage(&msg); } return (int) msg.wParam; } LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) { LPNMUPDOWN lpnmud; UINT code; switch(msg) { case WM_CREATE: CreateControls(hwnd); break; case WM_NOTIFY: code = ((LPNMHDR) lParam)->code; if (code == UDN_DELTAPOS) { lpnmud = (NMUPDOWN *) lParam; int value = lpnmud->iPos + lpnmud->iDelta; if (value < UD_MIN_POS) { value = UD_MIN_POS; } if (value > UD_MAX_POS) { value = UD_MAX_POS; } const int asize = 4; wchar_t buf[asize]; size_t cbDest = asize * sizeof(wchar_t); StringCbPrintfW(buf, cbDest, L"%d", value); SetWindowTextW(hStatic, buf); } break; case WM_DESTROY: PostQuitMessage(0); break; } return DefWindowProcW(hwnd, msg, wParam, lParam); } void CreateControls(HWND hwnd) { INITCOMMONCONTROLSEX icex; icex.dwSize = sizeof(INITCOMMONCONTROLSEX); icex.dwICC = ICC_UPDOWN_CLASS; InitCommonControlsEx(&icex); hUpDown = CreateWindowW(UPDOWN_CLASSW, NULL, WS_CHILD | WS_VISIBLE | UDS_SETBUDDYINT | UDS_ALIGNRIGHT, 0, 0, 0, 0, hwnd, (HMENU) ID_UPDOWN, NULL, NULL); hEdit = CreateWindowExW(WS_EX_CLIENTEDGE, WC_EDITW, NULL, WS_CHILD | WS_VISIBLE | ES_RIGHT, 15, 15, 70, 25, hwnd, (HMENU) ID_EDIT, NULL, NULL); hStatic = CreateWindowW(WC_STATICW, L"0", WS_CHILD | WS_VISIBLE | SS_LEFT, 15, 60, 300, 230, hwnd, (HMENU) ID_STATIC, NULL, NULL); SendMessageW(hUpDown, UDM_SETBUDDY, (WPARAM) hEdit, 0); SendMessageW(hUpDown, UDM_SETRANGE, 0, MAKELPARAM(UD_MAX_POS, UD_MIN_POS)); SendMessageW(hUpDown, UDM_SETPOS32, 0, 0); } ``` 在代碼示例中,我們有一個 UpDown 控件和一個靜態文本控件。 當前選定的 UpDown 值顯示在靜態文本控件中。 ```c #define UD_MAX_POS 30 #define UD_MIN_POS 0 ``` 這兩個常數用于 UpDown 控件的最大值和最小值。 ```c hUpDown = CreateWindowW(UPDOWN_CLASSW, NULL, WS_CHILD | WS_VISIBLE | UDS_SETBUDDYINT | UDS_ALIGNRIGHT, 0, 0, 0, 0, hwnd, (HMENU) ID_UPDOWN, g_hInst, NULL); ``` 為了創建 UpDown 控件,我們將`UPDOWN_CLASSW`傳遞給`CreateWindowW()`函數。 `UDS_SETBUDDYINT`標志使 UpDown 控件在其位置更改時向其好友發送消息(`WM_SETTEXT`)。 `UDS_ALIGNRIGHT`標志將 UpDown 控件放置在其伙伴窗口右邊緣的旁邊。 ```c SendMessageW(hUpDown, UDM_SETBUDDY, (WPARAM) hEdit, 0); ``` `UDM_SETBUDDY`消息將編輯控件設置為 UpDown 控件的好友窗口。 ```c SendMessageW(hUpDown, UDM_SETRANGE, 0, MAKELPARAM(UD_MAX_POS, UD_MIN_POS)); ``` `UDM_SETRANGE`消息設置 UpDown 控件的最小和最大位置。 ```c SendMessageW(hUpDown, UDM_SETPOS32, 0, 0); ``` 通過`UDM_SETPOS32`消息,我們設置 UpDown 控件的初始位置。 ```c code = ((LPNMHDR) lParam)->code; if (code == UDN_DELTAPOS) { ... } ``` 當控件的位置即將更改時(即在控件更新其值之前),操作系統會將`UDN_DELTAPOS`通知發送到 UpDown 控件的父窗口。 ```c lpnmud = (NMUPDOWN *) lParam; int value = lpnmud->iPos + lpnmud->iDelta; ``` `NMUPDOWN`結構包含有關 UpDown 修改的信息。 `iPos`值是 UpDown 控件的當前位置。 `iDelta`是 UpDown 控件位置的建議更改。 根據這兩個值,我們計算出將出現在控件中的最終值。 ```c if (value < UD_MIN_POS) { value = UD_MIN_POS; } if (value > UD_MAX_POS) { value = UD_MAX_POS; } ``` 此代碼確保靜態文本不會顯示超出 UpDown 范圍的值。 ```c int const asize = 4; wchar_t buf[asize]; size_t cbDest = asize * sizeof(wchar_t); StringCbPrintfW(buf, cbDest, L"%d", value); ``` 使用`StringCbPrintfW()`函數,我們構建了要在靜態文本控件中顯示的字符串。 ```c SetWindowTextW(hStatic, buf); ``` 最后,使用`SetWindowTextW()`函數更新靜態文本控件。 ![UpDown control](https://img.kancloud.cn/bb/cf/bbcfe4f1947982af56271971e6b61b36_280x200.jpg) 圖:UpDown 控件 ## `MonthCalendar`控件 月歷是一個復雜的控件,用于選擇日期。 可以通過簡單直觀的方式選擇日期。 `monthcalendar.c` ```c #include <windows.h> #include <commctrl.h> #include <wchar.h> #include <strsafe.h> LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); void CreateControls(HWND); void GetSelectedDate(HWND, HWND); HWND hStat; HWND hMonthCal; int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { HWND hwnd; MSG msg; WNDCLASSW wc = {0}; wc.lpszClassName = L"Month Calendar"; wc.hInstance = hInstance ; wc.hbrBackground = GetSysColorBrush(COLOR_3DFACE); wc.lpfnWndProc = WndProc ; wc.hCursor = LoadCursor(0, IDC_ARROW); RegisterClassW(&wc); hwnd = CreateWindowW(wc.lpszClassName, L"Month Calendar", WS_OVERLAPPEDWINDOW | WS_VISIBLE, 100, 100, 250, 300, 0, 0, hInstance, 0); while (GetMessage(&msg, NULL, 0, 0)) { DispatchMessage(&msg); } return (int) msg.wParam; } LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) { LPNMHDR lpNmHdr; switch(msg) { case WM_CREATE: CreateControls(hwnd); break; case WM_NOTIFY: lpNmHdr = (LPNMHDR) lParam; if (lpNmHdr->code == MCN_SELECT) { GetSelectedDate(hMonthCal, hStat); } break; case WM_DESTROY: PostQuitMessage(0); break; } return DefWindowProcW(hwnd, msg, wParam, lParam); } void CreateControls(HWND hwnd) { hStat = CreateWindowW(WC_STATICW, L"", WS_CHILD | WS_VISIBLE, 80, 240, 80, 30, hwnd, (HMENU)1, NULL, NULL); INITCOMMONCONTROLSEX icex; icex.dwSize = sizeof(icex); icex.dwICC = ICC_DATE_CLASSES; InitCommonControlsEx(&icex); hMonthCal = CreateWindowW(MONTHCAL_CLASSW, L"", WS_BORDER | WS_CHILD | WS_VISIBLE | MCS_NOTODAYCIRCLE, 20, 20, 200, 200, hwnd, (HMENU)2, NULL, NULL); } void GetSelectedDate(HWND hMonthCal, HWND hStat) { SYSTEMTIME time; const int dsize = 20; wchar_t buf[dsize]; ZeroMemory(&time, sizeof(SYSTEMTIME)); SendMessage(hMonthCal, MCM_GETCURSEL, 0, (LPARAM) &time); size_t cbDest = dsize * sizeof(wchar_t); StringCbPrintfW(buf, cbDest, L"%d-%d-%d", time.wYear, time.wMonth, time.wDay); SetWindowTextW(hStat, buf); } ``` 在我們的示例中,我們有兩個控件:月歷控件和靜態文本。 從月歷控件中選擇的日期以靜態文本顯示。 ```c hMonthCal = CreateWindowW(MONTHCAL_CLASSW, L"", WS_BORDER | WS_CHILD | WS_VISIBLE | MCS_NOTODAYCIRCLE, 20, 20, 200, 200, hwnd, (HMENU)2, NULL, NULL); ``` 在這里,我們創建一個月歷控件。 創建月歷控件的類名稱為`MONTHCAL_CLASSW`。 如果使用`MCS_NOTODAYCIRCLE`窗口樣式,則不會圈出今天的日期。 ```c INITCOMMONCONTROLSEX icex; icex.dwSize = sizeof(icex); icex.dwICC = ICC_DATE_CLASSES; InitCommonControlsEx(&icex); ``` 要注冊月歷控件,我們為`INITCOMMONCONTROLSEX`結構的`dwICC`成員指定`ICC_DATE_CLASSES`標志。 ```c case WM_NOTIFY: lpNmHdr = (LPNMHDR) lParam; if (lpNmHdr->code == MCN_SELECT) { GetSelectedDate(hMonthCal, hStat); } break; ``` 如果月份日歷控件中發生事件,則會發送`WM_NOTIFY`消息。 `lParam`包含指向`NMHDR`結構的指針,該結構包含通知代碼和其他信息。 ```c SendMessage(hMonthCal, MCM_GETCURSEL, 0, (LPARAM) &time); ``` 為了用選定的日期填充結構,我們向日歷控件發送了`MCM_GETCURSEL`消息。 ```c size_t cbDest = dsize * sizeof(wchar_t); StringCbPrintfW(buf, cbDest, L"%d-%d-%d", time.wYear, time.wMonth, time.wDay); SetWindowTextW(hStat, buf); ``` 我們構建字符串并將日期設置為靜態文本控件。 ![Month Calendar](https://img.kancloud.cn/43/7b/437bdefea37ba2269e50e3bd30f05f24_250x300.jpg) 圖:月歷 在 Windows API 教程的這一部分中,我們繼續介紹 Windows 控件-跟蹤欄,工具提示,上下按鈕和月份日歷。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看