MESSAGEBOX PERSONALISÉE (WIN32)

cs_eRoZion Messages postés 241 Date d'inscription vendredi 23 mai 2003 Statut Membre Dernière intervention 8 octobre 2007 - 23 nov. 2004 à 11:47
saradion Messages postés 25 Date d'inscription lundi 16 octobre 2006 Statut Membre Dernière intervention 2 décembre 2008 - 17 mai 2007 à 19:40
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/27757-messagebox-personalisee-win32

saradion Messages postés 25 Date d'inscription lundi 16 octobre 2006 Statut Membre Dernière intervention 2 décembre 2008
17 mai 2007 à 19:40
merci pour le code c tré gentil
magic_Nono Messages postés 1878 Date d'inscription jeudi 16 octobre 2003 Statut Membre Dernière intervention 16 mars 2011
25 janv. 2005 à 11:45
modif effectuée dans
int BMsgBoxChoix::messageBoxChoixIndirect(BMsgBoxChoix::MBSTRUCT* lpmbs)

avant

if(!bInitialized)
init();

insérer

/// algo : check du parent, récup mm si non spécifié.
if(lpmbs->hWnd==NULL)
{
HWND plomp=GetFocus();
if(plomp!=NULL)
lpmbs->hWnd=plomp;
}




Magicalement


PS ici, vous n'avez pas le 'BMsgBoxChoix::'
magic_Nono Messages postés 1878 Date d'inscription jeudi 16 octobre 2003 Statut Membre Dernière intervention 16 mars 2011
25 janv. 2005 à 11:19
soluce au pb de semi amodalité:

utiliser GetFocus() ou GetParent()

merci BruNews.

Bruno.
magic_Nono Messages postés 1878 Date d'inscription jeudi 16 octobre 2003 Statut Membre Dernière intervention 16 mars 2011
25 janv. 2005 à 10:41
Bj

j'ai repris cette classe et l'ai adapté pr VC6

je vais la reprendre pour prendre en cpte les modifs récentes.... merci à toi BN....
publication prochaine....

pour la contrib la lib est dc adaptée VC6,
intégrée dans des classes (ça fait plus propre)
et surtout elle a une nouvelle interface d'acces (2 en fait), basée sur les nombres de paramètres variable !

dont voici les protos :

int BMsgBoxChoix::messageBoxChoix(HWND hWnd, HINSTANCE hInstance, const char* lpText, const char* lpCaption, HICON hIcon, HFONT hFont, DWORD dwStyle,const char* txtPremierBouton,...);

int BMsgBoxChoix::messageBoxChoix(HWND hWnd, HINSTANCE hInstance, const char* lpText, const char* lpCaption, HICON hIcon, HFONT hFont, DWORD dwStyle,const BString& txtPremierBouton,...);

en plus de ça, ma lib d'interface fait l'interface (lol) avec une fonction de ce proto:

int BVisuel::msgBoxChoix(const char *titre, const char *intro, const char *premiereReponse, ...);

l'utilisation en est simplifiée à l'extrème :


switch(BVisuel::msgBoxChoix("Choix de la Base de Donnee ","Veuillez choisir la BD désirée","Locale","serveur temporaire","serveur final",0))
{
...
}


pour traduire les param variables :
actuellement, je suis passé par mes BLBString, (liste de chaines) [contenues dans ma sourse BListeIndir]

si vous avez un moyen d'intégrer ça simlement avec les TString je suis preneur

Magicalement
Nono.


PS :
bug constaté (j'ai pas checké si ça a été réglé plus haut) :
La boite crée est modale (ce qui correspond bien au fonctionnement voulu)
mais modale seulement pour la fonction en cours
cependant, elle a un comportement amodale si cette fonction a été lancée depuis une fenêtre.
cad la fenêtre appelante est activable !!!
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
29 nov. 2004 à 15:17
La mise en variable sur pile d'un iterateur n'est pas forcement systematique, mais bon...
gagah1 Messages postés 509 Date d'inscription samedi 28 juin 2003 Statut Membre Dernière intervention 3 août 2010
29 nov. 2004 à 14:11
D'accord. Merci!
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
29 nov. 2004 à 12:28
Oui. Par exemple si tu fais une boucle for(i =0...) le compilateur va utiliser une variable locale (sur la pile) alors qu'en fait on peut utiliser une registre
gagah1 Messages postés 509 Date d'inscription samedi 28 juin 2003 Statut Membre Dernière intervention 3 août 2010
28 nov. 2004 à 20:15
"plus efficace que ce que donne le compilo " veut dire quoi? Plus rapide?
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
28 nov. 2004 à 15:30
Bien sur que je pouvais le faire en C, mais ce genre de boucle est assez facile à écrire en asm, et plus efficace que ce que donne le compilo (a condition de bien les écrire, ce que je n'avais pas fait du premier coup)
gagah1 Messages postés 509 Date d'inscription samedi 28 juin 2003 Statut Membre Dernière intervention 3 août 2010
27 nov. 2004 à 09:24
Salut.

Dites-moi, ce petit bout de code en ASM, n'y a-t-il pas d'equivalence en C/C++? Ou on est obligé de passer par celà?
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
26 nov. 2004 à 10:19
OK
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
25 nov. 2004 à 13:03
A l'air correct, ensuite si tu devais employer ces fonctions dans un prog ou elles seraient tres souvent utilisees, je te conseille (pour les perfs) de les transformer en macros par '__inline', aucun prob puisqu'elles n'utilisent que les 3 registres generaux. Faudra par contre en modifier l'entete, regarde exemple sur ma bnstrcpy.
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
25 nov. 2004 à 10:21
Devrait suffire en 3 fois, je jetterai un oeil des que possible.
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
25 nov. 2004 à 10:07
BruNews> Voila j'ai essayer d'appliquer ce que t'as dit. J'ai déroulé trois fois les boucles, mais sur 127 octets je pouvais le faire environ dix fois, ca fait un peu beaucoup non?
Gendal67 Messages postés 627 Date d'inscription mercredi 16 juin 2004 Statut Membre Dernière intervention 24 juillet 2011 2
23 nov. 2004 à 21:32
hmm, ça m'a l'air d'avoir des avantages pratique mon pti vecchio...vai jetter un oeil :-))
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
23 nov. 2004 à 14:27
MEME emplacement memoire relu 3 fois alors que EDX non utilise !!!
Mets aussi les valeurs en place de '\n' sinon intransportable dans MASM.
On change:

__declspec(naked) int __fastcall LineSize(LPCTSTR lpText)
{ // ECX = lpText, ne pas changer sert calcul final en 1 cycle
__asm {
mov dl, [ecx]
mov eax, ecx ; eax avancera
next:
cmp dl, 10 ; '\n'
je short fin
cmp dl, 13 ; '\r'
je short fin
test dl, dl ; NULL fin de chaine
je short fin
inc eax
mov dl, [eax]
jmp short next
fin:
sub eax, ecx
ret 0
}
}

Des lignes de texte pouvant parfois etre tres longues, faudrait derouler les boucles, en 3 fois est generalement un bon compromis pour rester dans une plage de 127 octets.
Vois pour les autres si besoin d'applique ce principe.
Rejoignez-nous