3

Win7のカレンダーコントロールのフォントサイズを変更してタッチスクリーン対応にしたいです。私のマシンのテーマはエアロです。CalendarFontプロパティは、Aero テーマには影響しません。

そのため、OnDropDown メソッドをオーバーライドして、カレンダー コントロールのテーマを無効にしました。現在、フォントは変更されていますが、カレンダー ウィンドウのサイズは変更されていません。次の画像は、私が見ているウィンドウを示していますここに画像の説明を入力

コードを以下に示します。カレンダー ウィンドウのサイズを大きくするにはどうすればよいですか?

 protected override void OnDropDown(EventArgs e)
    {

        IntPtr pointerToCalenderWindow = SendMessage(Handle, DtmGetmonthcal,0,0);
        // Disble Theme
        SetWindowTheme(pointerToCalenderWindow, "", "");      

        var rect = new Rectangle();
        SendMessage(pointerToCalenderWindow, McmGetminreqrect, 0, ref rect);     

        MoveWindow(pointerToCalenderWindow,0,0,rect.Right + 2, rect.Bottom + 2, true);

        base.OnDropDown(e);
    }


private const int McmFirst = 0x1000;
    private const int McmGetminreqrect = (McmFirst + 9);
    private const int McsWeeknumbers = 0x4;
    private const int DtmFirst = 0x1000;
    private const int DtmGetmonthcal = (DtmFirst + 8);

    private const int WMPAINT = 0x000F;


    [DllImport("uxtheme.dll")]
    private static extern int SetWindowTheme(IntPtr hWnd, string appname, string idlist);


    [DllImport("User32.dll")]
    private static extern IntPtr SendMessage(IntPtr h,
                                             int msg,
                                             int param,
                                             int data);

    [DllImport("User32.dll")]
    private static extern int MoveWindow(IntPtr h,
                                         int x,
                                         int y,
                                         int width,
                                         int height,
                                         bool repaint);
4

1 に答える 1

3

この質問はあなたのものと同じ問題についてのようです:

答えは、実際にはカレンダー部分に使用される 2 つのウィンドウ (「内側」と「外側」) があり、外側のウィンドウのサイズを正しく設定する必要があることを示しています。

于 2013-04-16T08:02:32.317 に答える