2012-02-07 12 views
1

プレーンC、winapiアプリ。バディよりもアップダウンコントロールが高い

リソーススクリプトから作成されたダイアログボックスでは、完全に適合しますが、CreateWindowExで作成されたアップダウンコントロールは、いずれかの側の1つのピクセルでバディウィンドウ(編集コントロール)よりも背が高くなります。 それは大したことではありませんが、かなりかわいいです。私は考えることができたすべてを試して、それを固定することができなかった、どんな助けもありがたいです。

#include <Windows.h> 
#include <Commctrl.h> 
#include <stdio.h> 

#define print(...) sprintf(dbg, __VA_ARGS__);\ 
        WriteConsoleA(h_con_out, dbg, strlen(dbg), NULL, NULL) 

TCHAR *app_name = TEXT("ud"); 
HANDLE h_con_out; 
char dbg[80]; 

LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam); 

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow){ 
    HWND hwnd; 
    MSG msg; 
    WNDCLASSEX wcx; 
    INITCOMMONCONTROLSEX icx = {sizeof(icx), ICC_STANDARD_CLASSES | ICC_UPDOWN_CLASS}; 

    AllocConsole(); 
    h_con_out = GetStdHandle(STD_OUTPUT_HANDLE); 

    memset(&wcx, 0, sizeof(wcx)); 
    wcx.cbSize = sizeof(wcx); 
    wcx.lpfnWndProc = WndProc; 
    wcx.hInstance = hInstance; 
    wcx.hCursor = LoadCursor(NULL, IDC_ARROW); 
    wcx.hbrBackground = (HBRUSH) (COLOR_BTNFACE + 1); 
    wcx.lpszClassName = app_name; 

    if(!RegisterClassEx(&wcx)){ 
     MessageBox(NULL, TEXT("This program requires Windows 2000!"), app_name, MB_ICONERROR); 
     return 0; 
    } 
    InitCommonControlsEx(&icx); 

    hwnd = CreateWindowEx(
     0, app_name, app_name, 
     WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX, 
     CW_USEDEFAULT, CW_USEDEFAULT, 200, 100, 
     NULL, NULL, hInstance, NULL 
    ); 
    ShowWindow(hwnd, iCmdShow); 
    UpdateWindow(hwnd); 

    while((GetMessage(&msg, NULL, 0, 0)) != 0){ 
     TranslateMessage(&msg); 
     DispatchMessage(&msg); 
    } 

    return msg.wParam; 
} 

LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam){ 
    static HWND hEd, hUd; 

    switch(msg){ 
     case WM_CREATE: 
      hEd = CreateWindowEx(
       WS_EX_CLIENTEDGE, WC_EDIT, NULL, 
       WS_VISIBLE | WS_CHILD | WS_BORDER | 
       ES_RIGHT | ES_NUMBER, 
       5, 5, 52, 23, 
       hwnd, NULL, ((LPCREATESTRUCT) lParam)->hInstance, NULL 
      ); 
      hUd = CreateWindowEx(
       0, UPDOWN_CLASS, NULL, 
       WS_VISIBLE | WS_CHILD | 
       UDS_ALIGNRIGHT | UDS_ARROWKEYS | UDS_NOTHOUSANDS | UDS_AUTOBUDDY | UDS_HOTTRACK | UDS_SETBUDDYINT | UDS_AUTOBUDDY, 
       0, 0, 0, 0, 
       hwnd, NULL, ((LPCREATESTRUCT) lParam)->hInstance, NULL 
      ); 

      SendMessage(hUd, UDM_SETRANGE, 0, 10 | 1 << 16); 
      return 0; 

     case WM_DESTROY: 
      PostQuitMessage(0);   
      return 0; 
    } 

    return DefWindowProc(hwnd, msg, wParam, lParam); 
} 
+0

アプリケーションのテーマはありますか? Windows 7のボタン(少なくとも)には、ウィンドウの矩形内にピクセル「ギャップ」があります。 – Deanna

答えて

1

削除WS_BORDER編集コントロールのスタイルから:

は、ここでは、コードです。

+0

ありがとうございました。 – AlexTei

関連する問題