2012-02-27 33 views
0

如何创建大于32767的坐标的子窗口?例如:CreateWindow坐标限制为32767?

HWND tmp = 
CreateWindow(
    _T("BUTTON"), _T("Test"), 
    WS_CHILD | WS_VISIBLE, 
    10, 45000, 80, 25, 
    hWnd, (HMENU)1, (HINSTANCE)GetModuleHandle(NULL), NULL); 

此代码创建坐标为10; 32767的按钮。 MoveWindow或SetWindowPos函数的使用给出了相同的结果。

我需要创建窗口上滚动和子控件(简单的形式)。

+0

这看起来好像是一个窗口限制,试图在Delphi中放一个按钮在左= 50000,并立即将其减少到32767.您可能需要重新考虑您的布局,以便您不需要如此大的滚动宽度。 – Dampsquid 2012-02-27 14:25:52

+0

目前我正在修复非常旧的项目中的错误,并且不可能进行任何重构。顺便说一句,如果我将窗口滚动到底部并使用MoveWindow - 控件移动正确,并且它们在返回滚动(更多32767)后保持在正确的坐标中。目前我正在实施解决方法 - 挂钩滚动和聚焦事件的窗口管理器,但我不想要这样丑陋的解决方案。 – 2012-02-27 14:42:00

回答

1
HWND CreateWindowExPatched(DWORD exStyle, LPCTSTR className, LPCTSTR title, DWORD style, int x, int y, int width, int height, HWND parent, HMENU menu, HINSTANCE instance, LPVOID param) 
{ 
    HWND hWnd = NULL; 

    ScrollWindow(parent, -x, -y, NULL, NULL); 
    hWnd = CreateWindowEx(exStyle, className, title, style, 0, 0, width, height, parent, menu, instance, param); 
    ScrollWindow(parent, x, y, NULL, NULL); 

    return hWnd; 
} 

HWND CreateWindowPatched(LPCTSTR className, LPCTSTR title, DWORD style, int x, int y, int width, int height, HWND parent, HMENU menu, HINSTANCE instance, LPVOID param) 
{ 
    return CreateWindowExPatched(0, className, title, style, x, y, width, height, parent, menu, instance, param); 
} 
0

您使用哪种操作系统来运行代码?

在我的项目中,尽管Windows 7似乎将坐标截断为16位有符号整数范围(-32768和32767),但Window XP似乎没有这样做,并允许从-2147483648到2147483647,整个32位有符号整数范围。

+0

Windows XP/Windows 7都是 – 2014-01-04 10:07:13

相关问题