Главная страница
    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.56 MB
Время: 0.02 c
1-66255
net_phoenix
2002-01-03 19:51
2002.01.21
COM обьекты Использование серверов для связи с MS OFFICE програмами


1-66278
CheX
2001-12-27 18:52
2002.01.21
.dcu


6-66323
Redalert
2001-10-26 16:58
2002.01.21
сокет


3-66202
TYuri
2001-12-18 14:51
2002.01.21
Тогда еще вопрос


7-66380
Lizard
2001-09-30 14:03
2002.01.21
Как к письму приаттачить не один, а несколько файлов ?





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