2012-02-27 12 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に置き、immediatlyで32767に縮小しようとしました。そのような大きなスクロールが必要ないようにレイアウトを再考する必要があるかもしれません幅。 – Dampsquid

+0

現在、私は非常に古いプロジェクトでバグを修正しており、リファクタリングを行うことはできません。 Btw、ウィンドウを一番下までスクロールしてMoveWindowを使用すると、コントロールが移動し、スクロール(多くの場合は32767以上)を返した後、コントロールは正しい座標にとどまります。現在、私は回避策を実装しています - スクロールとフォーカスイベントをフックするウィンドウマネージャですが、私はそのような醜い解決策を望んでいません。 –

答えて

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 –

関連する問題