Форум: "Начинающим";
Текущий архив: 2007.09.30;
Скачать: [xml.tar.bz2];
ВнизSetWindowRgn Найти похожие ветки
← →
Dib@zol © (2007-08-31 15:12) [0]Почему сабж не работает с дочерними окнами проги и как заставить его с ними таки работать (сиречь задавать нужный регион)? В СДК ничего не сказано про это, гуглился - тоже ничего не надыбал... Как быть?
← →
Сергей М. © (2007-08-31 15:14) [1]
> Почему сабж не работает с дочерними окнами
Обязана работать.
← →
Dib@zol © (2007-08-31 15:18) [2]Неа. Создаю я напр лабел класса STATIC на окне родителе - нихрена! Прямоугольник несмотря на задание региона! Убираю при создании флаг ВС_ЧАЙЛД и всё пашет! Только метка уже не на родительском окне... плохо.
← →
Сергей М. © (2007-08-31 15:22) [3]А что говорит рез-т вызова ф-ции ?
← →
Dib@zol © (2007-08-31 15:41) [4]Ага. Вернула результат 1. Это означает некую ошибку. Какую только? ГетЛастЕррор после выполнения вернул 0!
← →
Сергей М. © (2007-08-31 15:46) [5]Return Values
If the function succeeds, the return value is nonzero
Т.е. ф-ция успешно отработала, так что не парь уже мозги насчет "не работает")
← →
Dib@zol © (2007-08-31 15:52) [6]Не веришь? Пожалста. Вот пример:
program Test;
{$Warnings off}
{$Hints off}
uses
Windows, Messages;
const
WW = 300;
WH = 170;
CN = "TEST_WND";
WN = "Test";
var
M : MSG;
R : HRGN;
W, L : HWND;
WC : WNDCLASS;
WXPos, WYPos : Word;
function WindowProc(hWnd: HWND; Msg, WParam, LParam: LongInt): LongInt; stdcall;
begin
Result:=0;
case Msg of
WM_CREATE:
begin
L:=CreateWindowEx(0, "STATIC", "", WS_VISIBLE or
WS_CHILD, 10, 10, 100, 100, hWnd, 0, HInstance, nil);
R:=CreateEllipticRgn(0, 0, 100, 100);
SetWindowRgn(L, R, true);
end;
WM_CLOSE:
begin
DestroyWindow(L);
DeleteObject(R);
DestroyWindow(hWnd);
end;
WM_DESTROY: PostQuitMessage(0);
else Result:=DefWindowProc(hWnd, Msg, WParam, LParam);
end;
end;
begin
WXPos:=round((GetSystemMetrics(SM_CXSCREEN)-WW)/2);
WYPos:=round((GetSystemMetrics(SM_CYSCREEN)-WH)/2);
With WC do begin
Style := CS_HREDRAW or CS_VREDRAW;
lpfnWndProc := @WindowProc;
cbClsExtra := 0;
cbWndExtra := 0;
hInstance := sysInit.HInstance;
hCursor := LoadCursor(0, IDC_ARROW);
hbrBackground := CreateSolidBrush(0);
lpszClassName := CN;
end;
RegisterClass(WC);
W := CreateWindowEx(0, CN, WN, WS_VISIBLE or WS_SYSMENU,
WXPos, WYPos, WW, WH, 0, 0, HInstance, nil);
ShowWindow(W, SW_SHOWNORMAL);
UpdateWindow(W);
while GetMessage(M, 0, 0, 0) do begin
TranslateMessage(M);
DispatchMessage(M);
end;
Halt(M.wParam);
end.
← →
Сергей М. © (2007-08-31 16:04) [7]А зачем ты создаешь доч.окно в оконной ф-ции род.окна ?
Создавай его после отработки ф-ции создания род.окна.
← →
Dib@zol © (2007-08-31 16:32) [8]Хм. А как ты себе это представляешь?
Я вынес в отдельную процедуру всё содержимое WM_CREATE, и проставил единственным параметром имя родительского окна. Я эту процедуру млн пытался использовать везде! WM_ACTIVATE, WM_TIMER, WM_PAINT (c флагом единственного выполнения ессно) - ничего не помогло! Вынул даже из самой оконной процедуры! Поставил вызов этой процедуры после UpdateWindow - ноль реакции! Лабел как был квадратным, так и остался.
Люди! Если кто из вас встречался с такой проблемой - пожалуйста скажите как её решить.
← →
clickmaker © (2007-08-31 16:37) [9]L:=CreateWindowEx(0, "STATIC", "Elliptic Label", WS_VISIBLE or
WS_CHILD or WS_CLIPSIBLINGS, 10, 10, 100, 100, hWnd, 0, HInstance, nil);
← →
Сергей М. © (2007-08-31 16:38) [10]
> как ты себе это представляешь?
Оч просто:
hParent := CreateWindowEx(..);
hChild := CreateWindowEx(..hParent ..);
...
SetWindowRgn(hChild);
← →
Dib@zol © (2007-08-31 16:46) [11]> [10] Сергей М. © (31.08.07 16:38)
Делал так уже. Не помогло.
> [9] clickmaker © (31.08.07 16:37)
ДААААА!!!! УРРЯЯЯЯЯ!!! Заработало! Гранреспект.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2007.09.30;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.036 c