Utilisation de la fonction CreateDialog() [C Win32] - C - Programmation
Marsh Posté le 11-08-2003 à 10:03:25
Je crois que "modeless" = non modale, çàd que le parent de la boîte de dial garde la haute main sur la gestion de ses événements et messages -- l'appelant continue à "tourner" derrière.
> C'est + compliqué.
Au contraire, une boîte modale (fonction DialogBox et non CreateDialog) prend la main et ne rend le contrôle à l'appelant (=le focus au parent) qu'une fois refermée par l'user.
Marsh Posté le 11-08-2003 à 10:07:10
C'est quoi tes problèmes ? C'est quoi ton code ?
Marsh Posté le 11-08-2003 à 10:11:59
ben le probleme c'est que ca marche pas lol, ca compile mais rien n'est affiche quand j'execute, mais le programme est lance car pour l'arreter je suis oblige d'aller dans le gestionnaire des taches.
Code :
|
Fichier ressource:
#include "resource.h"
MYDIALOG DIALOG 10, 10, 300, 110
STYLE WS_VISIBLE|WS_POPUP|WS_BORDER
CAPTION "Keyboard Hook"
BEGIN
CTEXT "Select One:", 1, 10, 10, 280, 12
PUSHBUTTON "&Test", 2, 75, 30, 60, 12
END
Enfin voila ma methode est surement tres mauvaise, mais sans exemples c'est chaud de bien partir du premier coup!
Marsh Posté le 11-08-2003 à 10:36:38
Et si tu fais un ShowWindow(...) derrière ton CreateDialog(...)?
Marsh Posté le 11-08-2003 à 10:38:24
http://msdn.microsoft.com/library/ [...] Dialog.asp
Citation : After CreateDialog returns, the application displays the dialog box (if it is not already displayed) by using the ShowWindow function. |
Après avoir créé, ajoute :
Code :
|
Ta boucle des messages ne va pa non plus. Faut appeler IsDialogMessage qui effectue un traitement supplémentaire spécifique aux dialogues.
Je ne m'en souviens plus, mais je crois qu'un appel à DestroyWindow est nécessaire aussi.
L'exemple de la msdn (Creating a Modeless Dialog Box) explique tout ça ...
http://msdn.microsoft.com/library/ [...] gBoxes.asp
Marsh Posté le 11-08-2003 à 11:01:50
Ah oui le coup du ShowWindow en lisant (un peu vite) je pensais que c'etait pas l'application qui s'en chargeait justement
Donc maintenant je vois quelquechose
Je vais voir pour le destroywindow aussi. Sinon pour le hwnd parent, ca gene pas de mettre celui du desktop? c'est mieux de mettre NULL?
Marsh Posté le 11-08-2003 à 11:22:14
Code :
|
j'ai rajoute ca, la dialog disparait mais dans le gestionnaire des tache elle est toujours la
Marsh Posté le 11-08-2003 à 11:24:04
ShowWindow(hWnd, SW_HIDE) avant le Destroy
Marsh Posté le 11-08-2003 à 11:43:06
Bah oui. Il faut un PostQuitMessage quelque part ... dans WM_DESTROY par exemple ...
Et s'il faut appeler DestroyWindow, c'est pour provoquer l'envoie de WM_DESTROY lors de WM_CLOSE.
Marsh Posté le 11-08-2003 à 13:04:46
T'es sur que tu la voulais "non modale", ta boite de dial ?
Marsh Posté le 11-08-2003 à 13:29:41
non lol, j'en sais rien pour faire une appli boite de dialogue en general c'est modal ?
Marsh Posté le 11-08-2003 à 13:58:07
ok donc j'ai adpate le code :
Code :
|
ca va ? qu'est-ce que je dois retourner dans WinMain, 0 ? ou ne pas mettre de return comme dans un int main() ?
Marsh Posté le 11-08-2003 à 14:18:42
return msg.wParam c'est très bien.
msg.wParam a pour valeur celle qui a été passée à PostQuitMessage ...
Marsh Posté le 11-08-2003 à 14:21:52
non mais je ne comprends pas parce que je n'ai pas de structure MSG dans le winmain
Marsh Posté le 11-08-2003 à 15:05:53
Autre question, dois-je rajouter un WNDCLASS et le register dans le WinMain, j'ai trouver un code qui le fait...
pour le return, tout simplement:
return DialogBox(...);
Marsh Posté le 11-08-2003 à 18:53:04
Alors soit tu fais CreateDialog avec une boucle des messages derrière (un peu débile dans ton cas), soit tu fais un return DialogBox ...
Marsh Posté le 12-08-2003 à 03:33:22
Ok j'ai fait une boite modale c'est mieux.
Sinon j'ai essaye de register un WNDCLASS mais ca semble ne servir a rien, par exemple hIcon ne change pas l'Icone de ma dialog, comment la changer (avec un CreateWindow il suffit de changer la valeur de la WNDCLASS > hIcon.)
Donc ca sert a rien de mettre un RegisterCLass avant mon return DialogBox, vu que le curseur, l'icone, le background, tout ca ne change pas
voila mon WinMain :
Code :
|
Marsh Posté le 12-08-2003 à 11:12:28
Essai de comprendre ce que tu fais ...
D'un côté ru créés une dialog, soit une fenêtre de classe dialog, et de l'autre tu enregistres ta propre classe. Les 2 n'ont rien à voir. Si tu enregistres ta propre classe, c'est pour créer une fenêtre de cette classe. Les modifs apportées à ta classe n'auront absolument (et heureusement) aucun impact sur les autres classes, dont fait partie la classe dialog.
Pour changer l'icone, envoie WM_SETICON.
http://msdn.microsoft.com/library/ [...] ETICON.asp
Marsh Posté le 12-08-2003 à 11:38:34
ah oui
bordel je l'ai pas invente ce truc c'etait dans un cours, attends l'URL: http://perso.wanadoo.fr/peggs/lang_101.htm
c'est moi qui n'est pas su lire son truc ?
Marsh Posté le 12-08-2003 à 16:54:35
J'ai survolé ce code ...
Et soit j'ai pas tout pigé, soit c'est n'importe quoi.
- c'est quoi DialogFunc, ça sort d'ou ?
- si la classe des dialog s'appelait "dialog", je pourrais trouver une certaine logique à ce code, mais ce n'est pas le cas (c'est #32770).
http://msdn.microsoft.com/library/ [...] window.asp
En lisant ces tuts :
http://msdn.microsoft.com/library/ [...] ations.asp
http://msdn.microsoft.com/library/ [...] gBoxes.asp
je ne trouve aucune référence à RegisterClass.
Marsh Posté le 12-08-2003 à 19:24:03
HelloWorld a écrit : J'ai survolé ce code ... |
C'est la fonction de callback du dialog, dc ça sort de nulle part, elle gère les evn du dialog et c'est le programmeur qui la définit. Ce qui est en effet le cas à http://perso.wanadoo.fr/peggs/lang_105.htm
Marsh Posté le 13-08-2003 à 10:48:35
Ben si ça sort de son code
Je trouvais nul part sa définition, d'ou mon interrogation ...
Marsh Posté le 11-08-2003 à 07:21:43
Salut,
Je ne parviens pas a utiliser cette fonction pour creer une boite de dialogue (mais en fait je me demande, est-ce au'il faut d'abord creer une window avec CreateWindow par exemple?)
Je veux juste faire une petite appli comme en VB par exemple (form), en fait j'appelle CreateDialog dans le WinMain avec comme parent ben... DesktopWindow
Enfin j'ai rien compris a l'exemple msdn qui est pas top on va dire, et j'ai pas trouve ailleurs. Donc un bout de code serait le bienvenu (une fonction WinMain qui utilise CreateDialog quoi)
merci
ANT
edit: au passage on peut me dire brievement la difference modal / modeless ?
Message édité par antsite le 11-08-2003 à 07:23:37