Comment afficher une fenêtre non modale à partir d’une DLL C native

Je dois créer une invite simple dans une DLL C native. Je n’ai jamais eu à créer de fenêtres en C, donc je ne sais pas quelles sont les possibilités.

La fenêtre doit contenir une zone de texte et un bouton. Je devrais pouvoir obtenir la valeur de cette zone de texte lorsque l’utilisateur appuie sur le bouton. Lorsqu’elle est affichée, la fenêtre ne doit pas interrompre le stream du programme, elle doit être non modale. Je dois pouvoir fermer la fenêtre du code dans la DLL.

Je pensais utiliser MFC jusqu’à ce que je réalise que c’était pour C ++. J’ai donc pensé pouvoir écrire un wrapper et l’utiliser ensuite, mais il est évident que certaines parties du projet doivent être restructurées pour que cela fonctionne (comme pour changer les points d’entrée). Je suis un peu confus quant à l’utilisation de n’importe quel “GUI-Frameworks”, mais s’il existe une solution simple, ce serait génial.

La solution devrait être aussi simple que possible.

MODIFIER:

A quoi sert la DLL …

Nous avons une suite d’applications (je l’appellerai simplement l’IDE) qui utilise l’interface SCC. Nous avons un référentiel SVN, nous utilisons donc PushOk pour traduire les requêtes des commandes IDE en SVN. La définition de l’interface SCC des PushOk et de l’EDI n’étant pas toujours cohérente, l’EDI se bloque avec certaines opérations. Comme nous ne possédons pas le code source de PushOk, nous avons écrit notre propre DLL de proxy qui corrigeait les problèmes spécifiques que nous renconsortingons.

Maintenant, PushOk n’a pas la possibilité d’obtenir un fichier lors de la spécification de la révision (mais cela ne fonctionne pas dans notre cas). Nous devons donc le mettre en œuvre nous-mêmes. La fenêtre susmentionnée serait la fenêtre dans laquelle on pourrait entrer une révision, puis on obtiendrait ce fichier avec cette révision.

Vous ne devriez pas utiliser un GUI-Framework à partir d’une DLL, c’est une recette pour un désastre. Tenez-vous en à la simple API Win32 (CreateDialog () et amis et tout devrait bien se passer).

(Cette phrase est copiée du commentaire, alors je vais élaborer).

Cette fonction est réellement facile à utiliser:

  • Vous avez d’abord besoin d’une ressource DIALOG compilée dans votre DLL. L’éditeur de ressources intégré VisualStudio sera utile ici.

  • Puis écrivez une fonction DLGPROC

.

 BOOL CALLBACK MyDialogProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) { switch (msg) { case WM_INITDIALOG: /* ... */ default: return FALSE; } } 
  • Et dans votre fonction exscope, appelez et enregistrez le descripteur pour plus tard:

.

  HWND hWnd = CreateDialog(hInstance, MAKEINTRESOURCE(ID_MY_DIALOG), NULL); 
  • Si vous voulez détruire le dialog, appelez simplement:

.

 DestroyWindow(hWnd); 

Trouvez tout ce que vous voulez savoir sur les dialogs Win32 (et plus) ici .