Научите рисовать на диалогах из ресурсов?!
От: Eazy-Z Россия zayatz@mail.ur.ru
Дата: 06.06.02 17:23
Оценка:
Научите рисовать на диалогах из ресурсов?!
в частности интерисует PropertySheet с формами из ресурсов...
никак не могу нарисовать на STATICе,
использую в WM_PAINT DrawIcon, делаю всё прально вроде, но изначально не отрисовывается, а отрисовывается только если другим приложением форму закрыть и потихоньку отодвигать

вообщем научите, а то сам уже дня три бьюсь... пробовал уже и подмену wndproc у STATIC который из ресурсов создается, непомогло...

ответ жду либо в форуме либо по
ps: хотелось бы конечно примерчика, но в принципе и общий принцип подойдёт... каламбур-с
Re: Научите рисовать на диалогах из ресурсов?!
От: Dront Россия  
Дата: 07.06.02 05:12
Оценка:
Здравствуйте Eazy-Z, Вы писали:

EZ>Научите рисовать на диалогах из ресурсов?!

EZ>в частности интерисует PropertySheet с формами из ресурсов...
EZ>никак не могу нарисовать на STATICе,
EZ>использую в WM_PAINT DrawIcon, делаю всё прально вроде, но изначально не отрисовывается, а отрисовывается только если другим приложением форму закрыть и потихоньку отодвигать

Так все правильно. Рисуй в WM_PAINT. Твоя проблема в том, что WM_PAINT вызывается только тогда, когда винды перерисовывают это окно. А если тебе надо перерисовать его тогда, когда тебе надо (например, в InitDialog), используй RedrawWindow.
WBR, Andrey Reznik (2:5020/2999, Andrey_Reznik@rambler.ru)
Re: Научите рисовать на диалогах из ресурсов?!
От: Алекс Россия http://wise-orm.com
Дата: 07.06.02 08:53
Оценка:
Здравствуйте Eazy-Z, Вы писали:

EZ>Научите рисовать на диалогах из ресурсов?!

EZ>в частности интерисует PropertySheet с формами из ресурсов...
EZ>никак не могу нарисовать на STATICе,
EZ>использую в WM_PAINT DrawIcon, делаю всё прально вроде, но изначально не отрисовывается, а отрисовывается только если другим приложением форму закрыть и потихоньку отодвигать

EZ>вообщем научите, а то сам уже дня три бьюсь... пробовал уже и подмену wndproc у STATIC который из ресурсов создается, непомогло...


EZ>ответ жду либо в форуме либо по

EZ>ps: хотелось бы конечно примерчика, но в принципе и общий принцип подойдёт... каламбур-с

Если вся проблема в том, как нарисовать иконку, то ее и рисовать не надо! Есть же стиль SS_ICON!
Re: Научите рисовать на диалогах из ресурсов?!
От: Eazy-Z Россия zayatz@mail.ur.ru
Дата: 07.06.02 15:48
Оценка:
Более точно опишу проблему. (пишу на дельфи)
В ресурсах есть форма, которая выводится на экран в виде PropertySheet:

procedure config;
var
 SheetPage:Array [0..1] of TPropSheetPage;
 SheetHeader:TPROPSHEETHEADER;
begin
 SheetPage[0].dwSize:=SizeOf(TPropSheetPage);
 SheetPage[0].dwFlags:=0;
 SheetPage[0].hInstance:=HInstance;
 SheetPage[0].pszTemplate:=MakeIntResource(1001);
 SheetPage[0].pszIcon:=nil;
 SheetPage[0].pfnDlgProc:=@GeneralProc;
 SheetPage[0].pszTitle:=nil;
 SheetPage[0].lParam:=0;
 SheetPage[0].pfnCallback:=nil;
...
 SheetHeader.dwSize:=SizeOf(TPropSheetHeader);
 SheetHeader.dwFlags:=PSH_PROPSHEETPAGE or PSH_NOAPPLYNOW;
 SheetHeader.hwndParent:=plugin.hwndParent;
 SheetHeader.hInstance:=HInstance;
 SheetHeader.pszIcon:=nil;
 SheetHeader.pszCaption:=plugin.description;
 SheetHeader.nPages:=SizeOf(SheetPage) div SizeOf(TPropSheetPage);
 SheetHeader.nStartPage:=0;
 SheetHeader.ppsp:=@SheetPage;
 PropertySheet(SheetHeader);
end;


диалог в виде PropertySheet создаётся "на ура"
далее я обработчике одной из его форм GeneralProc я обрабатываю несколько сообщений:

function GeneralProc(hwndDlg:HWND;uMsg:UINT;wPar:WPARAM;lPar:LPARAM):LongBool;
 stdcall;
var
 ElementWnd:hWND;
 IconHandle:HICON;
 IconDC:HDC;
begin
 result:=false;
 case uMSG of
 WM_InitDialog:
  begin
   //здесь я заполняю значениями комбобоксы и выставляю начальные значения всех элементов
  end;
  WM_PAINT:
  begin
   IconHandle:=LoadIcon(plugin.hDLLInstance,'ROWS_MODE2'); //гружу из ресурсов иконку
   ElementWnd:=GetDlgItem(hwndDlg,IDC_FrameBitmap); //получаю hWND элемента в диалоге
                                                    //где хочу отрисовать иконку
   IconDC:=GetDC(ElementWnd); //беру hDC етого места
   DrawIcon(IconDC,0,0,IconHandle); //пытаюсь рисовать
   ReleaseDC(ElementWnd,IconDC); //освобождаю hDC
   DestroyIcon(IconHandle);} //и удаляю hICON
  end;
 end;
end;


Проблема и заключается в том, что при инициализации диалога ничего не отображается,
а отображается если закрыть окно диалога любым другим окном и тихооонько :) отодвигать ето окно... тогда также тихонько все отрисуется, но если убрать резко окно, то рисунок пропадает...
может есть более удобный способ загрузить картинку в елемент формы из ресурсов в рантайме?
как-то же реализовано это в 'проводник->свойства диска'
Re[2]: Научите рисовать на диалогах из ресурсов?!
От: Аноним  
Дата: 07.06.02 17:19
Оценка:
Здравствуйте Алекс, Вы писали:

А>Если вся проблема в том, как нарисовать иконку, то ее и рисовать не надо! Есть же стиль SS_ICON! ;)


а можно по-подробнее? мне бы в рантайме поменять её еще бы
:crash:
Re[2]: Научился рисовать на диалогах из ресурсов!!! :-)
От: Eazy-Z Россия zayatz@mail.ur.ru
Дата: 09.06.02 14:35
Оценка:
Вощем я сам решил свою проблему :maniac:
В ресурсах у елемента на который хотим картинку помещать указываю стиль owner-draw
и потом обрабатываю WM_DRAWITEM таким образом:
function GeneralProc(hwndDlg:HWND;uMsg:UINT;wPar:WPARAM;lPar:LPARAM):LongBool;
stdcall;
var
 FrameIconHandle:HICON;
 lpDIS: ^DRAWITEMSTRUCT;
begin
 result:=false;
 case uMSG of
  WM_InitDialog:
  begin
   //здесь я заполняю значениями комбобоксы и выставляю начальные значения всех элементов
  end;
......
  WM_DRAWITEM: if wPar=IDC_FrameBitmap then
  begin
   lpDIS:=ptr(lPar);
   DrawIcon(lpDIS.hDC,0,0,FrameIconHandle);
  end;
 end;
end;


Вдруг кому понадобится Ж-) тоже, что и мне, по поиску быстро найдут... а то я неделю проблему ету решал :user:
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.