Builder.cz - Informacni server o programovani

Odběr fotomagazínu

Fotografický magazín "iZIN IDIF" každý týden ve Vašem e-mailu.
Co nového ve světě fotografie!

 

Zadejte Vaši e-mailovou adresu:

Kamarád fotí rád?

Přihlas ho k odběru fotomagazínu!

 

Zadejte e-mailovou adresu kamaráda:



Zobrazení dialogu umístěného v DLL

Seznam témat     Nová odpověď

Přihlásit se     Registrace     Zapomenuté heslo

Re: Zobrazení dialogu umístěného v DLL

Autor: Neon

8:52:00 14.07.2010

2RCh: Super, to je přesně ono. Předtím jsem používal static jako "Static Text"; nevěděl jsem, že je třeba použít "Picture Control", a že disponuje vlastností "Type".

2JV: Ano, díky za upozornění, v nápovědě k VS to je také, jen jsem to přehlédl.

Neon

Citovat příspěvek

 

Re: Zobrazení dialogu umístěného v DLL

Autor: RadekChalupa

20:19:04 13.07.2010

SS_ETCHEDHORZ v resource editoru VS2008 nastavit LZE! Musíš ale tam dát "picture control" a ve vlastnosti "Type" se ti už nabídne:-)

Radek Chalupa
- vývoj software na zakázku
- školení programování (C/C++, Win32 API, ATL, COM, ActiveX, C#, NET Framework, MFC)
http://www.radekchalupa.cz

Citovat příspěvek

 

Re: Zobrazení dialogu umístěného v DLL

Autor: JiriValerian

19:17:51 13.07.2010

[color=#008000]Neon Napsal:
-------------------------------------------------------
> Ahoj, měl bych dotaz:
>
> Mám dll, která obsahuje definici dialogu. (Pro
> jistotu jsem dll otevřel ve VS, aby mi ukázal
> resources - a OK, dialog tam je.)
>
> Pak mám konzolovku, která načítá tu dll (ne přes
> LoadLibrary, ale vybarné funkce používají
> __declspec(dllimport) a __declspec(dllexport),
> takže loader naplní takulku odkazů při spouštení
> exe).
>
> V konzolovce volám funcki např. F, která je
> exportována z dll a importována do exe.
>
> Kód v dll vypadá zkráceně takto:
>
INT_PTR CALLBACK sDialogProc(HWND hwndDlg,
> UINT uMsg,
> WPARAM wParam,
> LPARAM lParam
> )
> { return DefWindowProc(hwndDlg, uMsg, wParam,
> lParam);
> }
>
> void DLLEXPORT F()
> { DialogBox(GetModuleHandle(NULL),
> MAKEINTRESOURCE(IDD_INFO), GetConsoleWindow(),
> sDialogProc);
>
> DWORD e = GetLastError();
> }
> Když z exe krokuji F, dialog se nezobrazí. Chyba e
> = 1813, což je "ERROR_RESOURCE_TYPE_NOT_FOUND".
>
> Asi předávám nespávně parametry HINSTANCE nebo
> HWND parent do DialogBox(), ale nevím, jak by měly
> vypadat správně.
>
> Prosím o radu.
>
> Předem díky.
>
> Neon
>[/color]

Máte tam ještě další chyu. [b]DefWindowProc[/b] se [b]nesmí používat[/b] v [b]proceduře dialogů[/b].

[b]DialogProc Function[/b]
http://msdn.microsoft.com/en-us/library/ms645469(VS.85).aspx

[b]Citace:[/b]
[color=#FF0000]Although the dialog box procedure is similar to a window procedure,
it must not call the DefWindowProc function to process unwanted messages.
Unwanted messages are processed internally by the dialog box window procedure.[/color]

Citovat příspěvek

 

Re: Zobrazení dialogu umístěného v DLL

Autor: Neon

16:19:08 13.07.2010

... No nevím, asi ta příloha nějak nejde protlačit do fóra 8-(

Citovat příspěvek

 

Re: Zobrazení dialogu umístěného v DLL

Autor: Neon

16:15:37 13.07.2010

... 2. pokus o přílohu - teď jako pdf. Neon

Citovat příspěvek

 

Re: Zobrazení dialogu umístěného v DLL

Autor: Neon

16:12:57 13.07.2010

... Kde takový styl staticu nastavím? V rámci WM_INITDIALOG?

Vlastnosti, co umožňuje resource editor (VS2008), jsou v png v přiloženém souboru.

Neon

Citovat příspěvek

 

Re: Zobrazení dialogu umístěného v DLL

Autor: pleytwak

15:55:02 13.07.2010

počítám, že je to STATIC stylu SS_ETCHEDHORZ

Citovat příspěvek

 

Re: Zobrazení dialogu umístěného v DLL

Autor: Neon

14:52:18 13.07.2010

Díky, to teď to funguje.

Měl bych ještě dotaz k dialogu -

- jak se v dialogu tvoří "taková ta vodorovná čárka" (třeba přes celý dialog)? Např. je k vidění u instalátorů programů - tou čárkou jsou odděleny dolní tlačítka "< Předchozí" a "Další >".

- Napadá mě použít hodně nízký static nebo group box s nulovým textem + nějaký styl, který by kreslil "obvyklou" hranu.

Je to "čistý" postup? Jak se ta čárka "obvykle" (výška controlu? styl?) definuje?

- Nebo se kreslení čárky zajišťuje v obsluze WM_PAINT dialogu? - Ale počítat polohu čárky pro kreslení mi přijde dost krkolomné.

Neon

Citovat příspěvek

 

Re: Zobrazení dialogu umístěného v DLL

Autor: RadekChalupa

12:58:18 13.07.2010

1. parametr DialogBox musí být handle té DLLky (pokud jak píšeš je resource toho dialogu v ní).
GetModuleHandle s parametrem NULL vždy vrátí handle exe, i když je volán z DLL. Můžeš jako parametr použít jméno souboru té DLL, nebo získat handle z parametru DllMain.

Radek Chalupa
- vývoj software na zakázku
- školení programování (C/C++, Win32 API, ATL, COM, ActiveX, C#, NET Framework, MFC)
http://www.radekchalupa.cz

Citovat příspěvek

 

Zobrazení dialogu umístěného v DLL

Autor: Neon

12:43:55 13.07.2010

Ahoj, měl bych dotaz:

Mám dll, která obsahuje definici dialogu. (Pro jistotu jsem dll otevřel ve VS, aby mi ukázal resources - a OK, dialog tam je.)

Pak mám konzolovku, která načítá tu dll (ne přes LoadLibrary, ale vybarné funkce používají __declspec(dllimport) a __declspec(dllexport), takže loader naplní takulku odkazů při spouštení exe).

V konzolovce volám funcki např. F, která je exportována z dll a importována do exe.

Kód v dll vypadá zkráceně takto:

[code]
INT_PTR CALLBACK sDialogProc(HWND hwndDlg,
UINT uMsg,
WPARAM wParam,
LPARAM lParam
)
{ return DefWindowProc(hwndDlg, uMsg, wParam, lParam);
}

void DLLEXPORT F()
{ DialogBox(GetModuleHandle(NULL), MAKEINTRESOURCE(IDD_INFO), GetConsoleWindow(), sDialogProc);

DWORD e = GetLastError();
}
[/code]
Když z exe krokuji F, dialog se nezobrazí. Chyba e = 1813, což je "ERROR_RESOURCE_TYPE_NOT_FOUND".

Asi předávám nespávně parametry HINSTANCE nebo HWND parent do DialogBox(), ale nevím, jak by měly vypadat správně.

Prosím o radu.

Předem díky.

Neon

Citovat příspěvek

 

 

 

Přihlášení k mému účtu

Uživatelské jméno:

Heslo: