2012-02-27 4 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

마치 윈도우 제한이기 때문에 델파이의 버튼을 왼쪽 = 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 –

관련 문제