Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
15-1188495169
Kolan
2007-08-30 21:32
2007.09.30
Что за кодировка: «РЁСЂСЌРє Третий» ?


2-1188830690
BFG9k
2007-09-03 18:44
2007.09.30
запрет перетаскивания окна


3-1179810817
DeadMeat
2007-05-22 09:13
2007.09.30
Invalid Typecast


2-1188997477
kyro
2007-09-05 17:04
2007.09.30
Почему в Firebird сбивается сортировка в индексе


8-1167150764
nali
2006-12-26 19:32
2007.09.30
Как нарисовать элипс без зазубрин (как это получается через





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский