Главная страница
    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.014 c
3-66189
Dr. Web
2001-12-17 16:04
2002.01.21
О XL Report e


7-66366
borman
2001-10-02 06:31
2002.01.21
Меню Завершение работы


4-66406
hn
2001-11-14 19:13
2002.01.21
ссылка на Edit, как получить текст, если он в веден в него


3-66216
Kaster
2001-12-18 21:12
2002.01.21
Помогите пожайлуста! Мне надо, чтобы после поиска, найденная запись стала первой в DBGrid е!


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