3

我想在Win7中更改日历控件的字体大小以使其与触摸屏兼容。我机器的主题是 Aero。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

看来这个问题和你的问题差不多:

答案表明实际上有两个窗口用于日历部分(一个“内部”和一个“外部”),并且您需要正确设置外部窗口的大小。

于 2013-04-16T08:02:32.317 回答