Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2002.01.21;
Скачать: [xml.tar.bz2];

Вниз

Как в DLL создать окно?   Найти похожие ветки 

 
Floyn   (2001-11-20 10:00) [0]

Привет, Народ!
1. Подскажите, как в DLL создать окно и экспортировать функцию, возвращающую его HWND. С помощью WinAPI окно создавал. А куда в DLL запихнуть цикл обработки сообщений, регистрацию класса не пойму. (Создание окна - непосредственно в экспортируемой функции, наверное).
2. Объясите еще, почему, если я пробую выносить регистрацию класса окна в отдельную процедуру, RegisterClass возвращает 0 (это уже не в DLL)?


 
Иван Шихалев   (2001-11-20 17:04) [1]

1. Можно в библиотеке отдельной нитью запускать обработку сообщений. Но если окно создается дочерним (не обязательно WS_CHILD или WS_POPUP) от окна в приложении, то сообщения должны обработаться основным циклом.
2. Код приведи. Всегда работало нормально.


 
Floyn   (2001-11-20 17:44) [2]

To Иван Шихалев:

Вариант 1 (работает):

program testwindow;

uses
Windows,
Messages;

{оконная процедура}
function WindowProc(hWnd, uMsg, wParam, lParam: Integer): Integer; stdcall;
begin
Result := DefWindowProc(hWnd, uMsg, wParam, lParam);
if uMsg = WM_DESTROY then
Halt;
end;

{создает окно}
function CreateMyWindow(Inst:integer):integer;
var
handle:integer;
Button1, Label1, Edit1: Integer;
hFont: Integer;
begin
handle:=CreateWindowEx(WS_EX_WINDOWEDGE, "MY_WINDOW_CLASS", "TestWindowCaption",
WS_VISIBLE or WS_SIZEBOX or WS_CAPTION or WS_SYSMENU,
363, 278, 305, 65, 0, 0, Inst, nil);
CreateMyWindow:=handle;
end;

var
Inst, Handle:integer;
Msg: TMsg;
WinClass: TWndClassA;
begin
Inst := hInstance;
{эта регистрация работает}
with WinClass do
begin
style := CS_CLASSDC or CS_PARENTDC;
lpfnWndProc := @WindowProc;
hInstance := Inst;
hbrBackground := color_btnface + 1;
lpszClassname := "MY_WINDOW_CLASS";
hCursor := LoadCursor(0, IDC_ARROW);
end;
if (RegisterClass(WinClass)<>0)
then
begin
Handle := createmywindow(Inst);
UpdateWindow(Handle);
while(GetMessage(Msg, Handle, 0, 0)) do
begin
TranslateMessage(msg);
DispatchMessage(msg);
end;
end;
end.

Вариант 2 (не работает):

...

{не работающая функция регистрации}
function RegisterMyClass(hInst:integer; wndproc:pointer):integer;
var
WinClass: TWndClassA;
begin
with WinClass do
begin
style := CS_CLASSDC or CS_PARENTDC;
lpfnWndProc := wndproc;
hInstance := hInst;
hbrBackground := color_btnface + 1;
lpszClassname := "MY_WINDOW_CLASS";
hCursor := LoadCursor(0, IDC_ARROW);
end;
RegisterMyClass:=RegisterClass(WinClass);
end;

var
Inst, Handle:integer;
Msg: TMsg;
begin
Inst := hInstance;
if (RegisterMyClass(Inst,@WindowProc)<>0)
then
begin
Handle := createmywindow(Inst);
UpdateWindow(Handle);
while(GetMessage(Msg, Handle, 0, 0)) do
begin
TranslateMessage(msg);
DispatchMessage(msg);
end;
end;
end.

С моей точки зрения они идентичны...



Страницы: 1 вся ветка

Форум: "WinAPI";
Текущий архив: 2002.01.21;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.003 c
1-66260
Boris_M
2002-01-03 09:03
2002.01.21
Event Handler для array


6-66329
atmospheric
2001-10-16 18:55
2002.01.21
SHARE ??


4-66401
qwertysdffsfsdfa
2001-11-22 01:19
2002.01.21
Как читать буфер клавиатуры?


1-66264
RaZEr
2001-12-29 06:54
2002.01.21
Попытки внести изменения в файл


14-66362
J_S
2001-11-22 21:45
2002.01.21
http://delphi.mastak.com/prikol/prayer.htm





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский