2015-10-22 73 views
1

的變化大小我有這樣的代碼:WINAPI - 日期時間選擇器,上/下一個按鈕

HWND hwndDP = CreateWindowEx(0, 
    DATETIMEPICK_CLASS, 
    TEXT("DateTime"), 
    WS_BORDER | WS_CHILD | WS_VISIBLE, 
    20, 50, 400, 60, 
    hDlg, 
    NULL, 
    NULL, 
    NULL);      
HFONT hFont = CreateFont(40, 0, 0, 0, FW_DONTCARE, FALSE, FALSE, FALSE, ANSI_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH | FF_SWISS, L"Arial"); 
SendMessage(hwndDP, WM_SETFONT, WPARAM(hFont), TRUE); 

它創建日期時間選擇器像下面的圖片。正如你所看到的,我改變了字體的大小,所以日期時間選擇器的字體更大。我有問題,圈出來的按鈕(下一個/前一個月)不會改變大小,而且很小。是否有可能改變這個按鈕的大小。我需要它,因爲我使用觸摸屏上的日期時間選擇器,很難點擊這兩個按鈕。

enter image description here

回答

1

不幸的是改變這一點,我看不出有什麼簡單的方法。這些控件實際上並不是真正的按鈕 - 它們只是繪製在窗口上,並且日曆控件的大小基於NONCLIENTMETRICS.iScrollHeight的值 - 它不允許您更改它們。

改變這種情況的唯一方法是全局性的,它會影響系統中的所有滾動條,可能不是你想要做的事情。

我對你的一個想法是對控件進行子類化,以將自己的(真實)按鈕控件置於現有控件的頂部。

然後,當你的子類程序獲取WM_COMMAND消息說,他們已經被點擊,發送日曆控件WM_KEYDOWN消息VK_NEXTVK_PRIOR - 這些鍵將導致其每月滾動在任何一個方向。

+0

真的很有意思。但有可能有按鈕,這是不可見的,但當點擊它(但不可見)的人,比發送WM_COMMAND?我有想法在特定位置創建類似區域的東西,並且如果有人點擊此區域,則可以選擇下一步或後退。但是比地區更簡單嗎? –

+0

@JaroKollár您可以使用子類在沒有按鈕的區域捕獲鼠標點擊,但不會有可見的跡象表明您可以單擊該區域。我想你理論上可以在處理'WM_PAINT'和'WM_PRINTCLIENT'的子類中繪製自己的按鈕。你需要試驗一下,看看各種想法是如何運作的。 –

+0

所以我試了一下,但我不知道爲什麼,當我點擊顯示日期選擇器的箭頭時,比我捕獲WM_LBUTTONDOWN,但是當我點擊顯示日期時間選擇器時,沒有WM_LBUTTONDOWN。那麼我怎樣才能抓住點擊?我認爲這個問題是,我分類只有控制與顯示日期和按鈕顯示日期選擇器,但不是子類日期選擇器。我如何處理它以繼承它? –

相關問題