Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

MESSAGEBOX PERSONALISÉE (WIN32)


Information sur la source

Catégorie :Divers Classé sous : messagebox, boite, message Niveau : Débutant Date de création : 23/11/2004 Date de mise à jour : 25/11/2004 10:06:41 Vu / téléchargé: 4 564 / 511

Note :
Aucune note

Commentaire sur cette source (16)
Ajouter un commentaire et/ou une note


Description

Permet d'afficher des MessageBox personnalisées sans avoir à utiliser des ressources DIALOG à chaque fois. On peut choisir plusieurs paramètres tels que l'icône, le nombre, le texte et l'alignement des boutons ou la police. Le projet est compatible UNICODE.
 

Fichier Zip

Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip

Historique

23 novembre 2004 13:47:09 :
25 novembre 2004 10:06:42 :
Application des conseils de BruNews Suppression de la fonction NumberOfLines qui était inutile

Commentaires et avis

signaler à un administrateur
Commentaire de BruNews le 23/11/2004 14:27:17 administrateur CS

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.

signaler à un administrateur
Commentaire de Gendal67 le 23/11/2004 21:32:58

hmm, ça m'a l'air d'avoir des avantages pratique mon pti vecchio...vai jetter un oeil :-))

signaler à un administrateur
Commentaire de vecchio56 le 25/11/2004 10:07:53 administrateur CS

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?

signaler à un administrateur
Commentaire de BruNews le 25/11/2004 10:21:20 administrateur CS

Devrait suffire en 3 fois, je jetterai un oeil des que possible.

signaler à un administrateur
Commentaire de BruNews le 25/11/2004 13:03:36 administrateur CS

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.

signaler à un administrateur
Commentaire de vecchio56 le 26/11/2004 10:19:47 administrateur CS

OK

signaler à un administrateur
Commentaire de gagah1 le 27/11/2004 09:24:37

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à?

signaler à un administrateur
Commentaire de vecchio56 le 28/11/2004 15:30:39 administrateur CS

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)

signaler à un administrateur
Commentaire de gagah1 le 28/11/2004 20:15:25

"plus efficace que ce que donne le compilo " veut dire quoi? Plus rapide?

signaler à un administrateur
Commentaire de vecchio56 le 29/11/2004 12:28:25 administrateur CS

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

signaler à un administrateur
Commentaire de gagah1 le 29/11/2004 14:11:40

D'accord. Merci!

signaler à un administrateur
Commentaire de BruNews le 29/11/2004 15:17:20 administrateur CS

La mise en variable sur pile d'un iterateur n'est pas forcement systematique, mais bon...

signaler à un administrateur
Commentaire de magic_Nono le 25/01/2005 10:41:48

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 !!!

signaler à un administrateur
Commentaire de magic_Nono le 25/01/2005 11:19:15

soluce au pb de semi amodalité:

utiliser GetFocus() ou GetParent()

merci BruNews.

Bruno.

signaler à un administrateur
Commentaire de magic_Nono le 25/01/2005 11:45:03

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::'

signaler à un administrateur
Commentaire de saradion le 17/05/2007 19:40:52

merci pour le code c tré gentil

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

MessageBox dans une boite de dial m_pMainWnd [ par gagaet22 ] Bonsoir à vous, Voilà mon interrogation : Je fait une boite de dial simple :     m_pMainWnd = dlg;     int qst messagebox [ par dambeaufort ] bonjour,voici mon probleme:J'ai une application mfc constitue de plusieur boite de dialogue s'ouvrant a la suite des autres. J'ai un thread qui lit en MessageBox et plein ecrant [ par D3m3T05 ] Bonjour a tous. je voudrait savoir s'il est possible de creer une message box qui s'affiche au premier plan (une message box modale). et aussi, commen fenêtre basculant en arrière-plan [ par by_rabbit_08 ] Bien le bonjourj'ai une simple question:J'ai une boite de dialogue qui appelle un Thread et qui lui passe en paramètre son handle (de la boite de dial Parasites dans Boite de message MULTILINE [ par LaPatoshe ] Bonjour, je voudrais savoir comment envoyer à une zone d'édition en Multiline, du texte comportant des retours à la ligne (\n), sans que des caractère Message [ par ToToL ] SalutJe travaille en Win32J'ai un thread qui boucle et qui toute les 10 seconde balance un message dans la liste de ceux de windows. sauf que quand j' Transmission impossible sans MessageBox ? [ par AlexMAN ] Bonsoir, Voila, il m'arrive un truc assez bizarre, j'ai remarqué ce probleme depuis quelques jours déja, et j'avoue que je n'y trouve aucune solution. Messagebox et police VC++(pas de MFC) [ par Frenchy62620 ] Une question concernant la messagebox est ce q'uon peut modifier la font de la messagebox avant son affichage? (juste la font de cet objet)Frenchy bouton stop [ par rlope ] BonjourJ'ai un petit problème avec un bouton STOP que je voudrais créer. (Visual C++ boite de dialogue)Explication :Avec un bouton de ma boite de dial Probleme compte [ par PatSW ] Salut,***Ceci est un message pour un administrateur!***Depuis environs 8 mois j'ai changer mon adresse email, et lorsque que je vais dans mes option d


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Comparez les prix Nouvelle version


HTC G1

Entre 449€ et 449€


Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,468 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.