C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Форма VCL на non-VCL окне
MDM
Отправлено: 01.07.2004, 11:17


Ученик-кочегар

Группа: Участник
Сообщений: 23



Как посадить VCL-форму на API-шный диалог?
Father
  Отправлено: 01.07.2004, 11:53


Ученик-кочегар

Группа: Участник
Сообщений: 17



Ты как это себе представляешь?
MDM
Отправлено: 01.07.2004, 13:32


Ученик-кочегар

Группа: Участник
Сообщений: 23



QUOTE (Father @ 01/07/2004, 12:55)
Ты как это себе представляешь?

Я так:
//форма.h
extern HWND hDialog;
class TPageForm1 : public TForm
{
...
protected:
void __fastcall CreateParams(TCreateParams& Params);
public: // User declarations
__fastcall TPageForm1(TComponent* Owner);
};
//форма.cpp
void __fastcall TPageForm1::CreateParams(TCreateParams& Params)
{
TForm::CreateParams(Params);
Params.Style = WS_CHILD | WS_CLIPSIBLINGS;
Params.WndParent = hDialog;
Params.X = 0;
Params.Y = 0;
RECT Rect;
::GetClientRect(hDialog, &Rect);
Params.Width = Rect.right — Rect.left;
Params.Height = Rect.bottom — Rect.top;
}
//процедура диалога.cpp
HWND hDialog;
...
BOOL CALLBACK PageDlgProc(HWND hDlg, UINT uMessage, WPARAM wParam, LPARAM lParam)
{
...
switch (uMessage)
{
case WM_INITDIALOG:
hDialog = hDlg;

PageForm1 = new TPageForm1(Application);
PageForm1->Show();

break;
...
case WM_DESTROY:
delete PageForm1;
break;
...
default:
return FALSE;
}

return TRUE;
}
но неуверен что это правильно (работает нормально).

PS:
И почему Ты меня спрашиваешь? Я спросил эху — значит не знаю.

Вернуться в Вопросы программирования в C++Builder