CreateWindow坐标限制为32767?

时间:2012-02-27 14:13:20

标签: 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函数可以得到相同的结果。

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

2 个答案:

答案 0 :(得分: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 );
}

答案 1 :(得分:0)

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

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