private unsafe bool GetCalendarGridInfoText(MCGIP dwPart, int calendarIndex, int row, int column, out string text)
            {
                const int   nameLength = 128;
                Span <char> name       = stackalloc char[nameLength + 2];

                bool result;

                fixed(char *pName = name)
                {
                    var gridInfo = new MCGRIDINFO
                    {
                        cbSize    = (uint)sizeof(MCGRIDINFO),
                        dwFlags   = MCGIF.NAME,
                        dwPart    = dwPart,
                        iCalendar = calendarIndex,
                        iCol      = column,
                        iRow      = row,
                        pszName   = pName,
                        cchName   = (uint)name.Length - 1
                    };

                    result = User32.SendMessageW(_owner, (User32.WM)MCM.GETCALENDARGRIDINFO, IntPtr.Zero, ref gridInfo) != IntPtr.Zero;
                }

                text = name.SliceAtFirstNull().ToString();
                return(result);
            }
            private bool GetCalendarGridInfo(ref MCGRIDINFO gridInfo)
            {
                // Do not use this if gridInfo.dwFlags contains MCGIF_NAME;
                // use GetCalendarGridInfoText() instead.
                Debug.Assert(
                    (gridInfo.dwFlags & MCGIF.NAME) == 0,
                    "Param dwFlags contains MCGIF_NAME, use GetCalendarGridInfoText() to retrieve the text of a calendar part.");

                gridInfo.dwFlags &= ~MCGIF.NAME;

                return(User32.SendMessageW(_owner, (User32.WM)MCM.GETCALENDARGRIDINFO, IntPtr.Zero, ref gridInfo) != IntPtr.Zero);
            }
Example #3
0
        public unsafe void MCGRIDINFO_x32_ensure_layout()
        {
            MCGRIDINFO sut  = new MCGRIDINFO();
            byte *     addr = (byte *)&sut;

            Assert.Equal(0, (byte *)&sut.cbSize - addr);          // 4, UINT
            Assert.Equal(4, (byte *)&sut.dwPart - addr);          // 4, DWORD
            Assert.Equal(8, (byte *)&sut.dwFlags - addr);         // 4, DWORD
            Assert.Equal(12, (byte *)&sut.iCalendar - addr);      // 4, int
            Assert.Equal(16, (byte *)&sut.iRow - addr);           // 4, int
            Assert.Equal(20, (byte *)&sut.iCol - addr);           // 4, int
            Assert.Equal(24, (byte *)&sut.bSelected - addr);      // 4, BOOL
            Assert.Equal(28, (byte *)&sut.stStart - addr);        // 16, SYSTEMTIME
            Assert.Equal(44, (byte *)&sut.stEnd - addr);          // 16, SYSTEMTIME
            Assert.Equal(60, (byte *)&sut.rc - addr);             // 16, RECT
            Assert.Equal(76, (byte *)&sut.pszName - addr);        // 4, PWSTR
            Assert.Equal(80, (byte *)&sut.cchName - addr);        // 4, size_t
        }
            private unsafe bool GetCalendarGridInfo(
                MCGIF dwFlags,
                MCGIP dwPart,
                int calendarIndex,
                int row,
                int column,
                out RECT rectangle,
                out Kernel32.SYSTEMTIME endDate,
                out Kernel32.SYSTEMTIME startDate)
            {
                Debug.Assert(
                    (dwFlags & ~(MCGIF.DATE | MCGIF.RECT)) == 0,
                    "GetCalendarGridInfo() should be used only to obtain Date and Rect,"
                    + "dwFlags has flag bits other that MCGIF_DATE and MCGIF_RECT");

                var gridInfo = new MCGRIDINFO
                {
                    cbSize    = (uint)sizeof(MCGRIDINFO),
                    dwFlags   = dwFlags,
                    dwPart    = dwPart,
                    iCalendar = calendarIndex,
                    iCol      = column,
                    iRow      = row
                };

                try
                {
                    bool result = GetCalendarGridInfo(ref gridInfo);
                    rectangle = gridInfo.rc;
                    endDate   = gridInfo.stEnd;
                    startDate = gridInfo.stStart;
                    return(result);
                }
                catch
                {
                    rectangle = new RECT();
                    endDate   = new Kernel32.SYSTEMTIME();
                    startDate = new Kernel32.SYSTEMTIME();
                    return(false);
                }
            }
Example #5
0
        public unsafe void MCGRIDINFO_x64_ensure_layout()
        {
            if (!Environment.Is64BitProcess)
            {
                return;
            }

            MCGRIDINFO sut  = new MCGRIDINFO();
            byte *     addr = (byte *)&sut;

            Assert.Equal(0, (byte *)&sut.cbSize - addr);          // 4, UINT
            Assert.Equal(4, (byte *)&sut.dwPart - addr);          // 4, DWORD
            Assert.Equal(8, (byte *)&sut.dwFlags - addr);         // 4, DWORD
            Assert.Equal(12, (byte *)&sut.iCalendar - addr);      // 4, int
            Assert.Equal(16, (byte *)&sut.iRow - addr);           // 4, int
            Assert.Equal(20, (byte *)&sut.iCol - addr);           // 4, int
            Assert.Equal(24, (byte *)&sut.bSelected - addr);      // 4, BOOL
            Assert.Equal(28, (byte *)&sut.stStart - addr);        // 16, SYSTEMTIME
            Assert.Equal(44, (byte *)&sut.stEnd - addr);          // 16, SYSTEMTIME
            Assert.Equal(60, (byte *)&sut.rc - addr);             // 16, RECT
            // 4 bytes alignment 76 -> 80
            Assert.Equal(80, (byte *)&sut.pszName - addr);        // 8, PWSTR
            Assert.Equal(88, (byte *)&sut.cchName - addr);        // 8, size_t
        }
Example #6
0
 public extern static IntPtr SendMessage(HandleRef hWnd, int Msg, int wParam, [In, Out] ref MCGRIDINFO gridInfo);