2009-09-03 5 views
1

Après un traitement mon programme affiche une boîte de message disant que vous pouvez lire un fichier journal pour en savoir plus sur ce qui a été fait. Je voudrais montrer un lien vers le fichier au lieu de son nom. Comment cela est-il fait?Lien vers un fichier dans un MessageBox VC++ 2008 Windows xp

Merci beaucoup

MISE À JOUR:

IDD_RESULT_DIALOG DIALOGEX 0, 0, 228, 58 
STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION 
CAPTION "Fax/Modem testing tool" 
FONT 8, "Helv", 0, 0, 0x1 
BEGIN 
    PUSHBUTTON  "Cancelar",IDC_BUTTON1,174,38,50,14 
    CONTROL   "<a>SysLink1</a>",IDC_SYSLINK1,"SysLink",WS_TABSTOP,105,22,32,14 
END 

Voici le code dans le fichier rc où le contrôle syslink a été créé.

BOOL CALLBACK ResultDlg(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam) 
{ 
    switch (msg)     /* manipulador del mensaje */ 
    { 
     case WM_INITDIALOG: 
      SetWindowText(GetDlgItem(hDlg,IDC_SYSLINK1), (LPCSTR)"Visit my web site"); 
      return TRUE; 
     case WM_COMMAND:   
      EndDialog(hDlg, FALSE); 
      return TRUE; 
    } 
    return FALSE; 
} 

C'est où l'utilisation SetWindowText ...

La boîte de dialogue ne se présente pas. Si un contrôle Syslink est incorporé dans la boîte de dialogue. Je n'utilise pas MFC ... cela peut-il être le problème?

Répondre

1

Vous pouvez fournir un bouton qui appelle la fonction Win32 ShellExecute pour ouvrir un fichier journal.

+0

Je suppose que dans ce cas je ne peux pas utiliser un MessageBox mais un dialogue personnalisé. – deb

+0

Non, vous pouvez. 'if (MessageBox (0," Voulez-vous ouvrir le fichier journal? "," Confirmation ", MB_OKCANCEL | MB_ICONQUESTION) == IDOK) ShellExecute (0, NULL," c: \\ votre_journal.txt ", NULL, NULL, SW_SHOWDEFAULT); ' – pingw33n

+0

Enfin, je l'ai fait à votre façon parce que c'était plus simple et plus facile. – deb

1

à mon humble avis, vous avez deux options:

A) Faites votre propre boîte de dialogue à partir de zéro

B) Utilisez un crochet de fil (SetWindowsHookEx) et relevez l'initialisation du MessageBox(), redimensionnez un peu bit et ajouter vos propres contrôles (XP et plus tard ont un link control qui supporte le HTML de base.Ce contrôle existe également sur 2000 mais est non documenté et a un nom de classe différent)

+0

Tellement de programmation de Windows est comme ceci - étape juste un peu en dehors des limites de ce que Microsoft fournit, et l'effort monte d'un ordre de grandeur. –

0

Il me semble que la solution la plus directe serait d'avoir votre propre boîte de dialogue qui ressemble à une boîte de fenêtre de message standard et utilisez le contrôle de lien (référence ed par Anders dans ce fil) à la place du texte statique standard. Je pense que c'est beaucoup plus sain que la route SetWindowHookEx.

+0

Y at-il un moyen de faire cette boîte de dialogue montrant le nom du fichier journal ... dinamiquement, je veux dire, montrer le nom du journal ... qui n'est pas toujours le même nom (cela dépend de l'heure d'exécution) – deb

+0

devrait être assez facile suffit d'utiliser setwindowtext sur le contrôle de lien pour définir le texte sur le contrôle lorsque le dialogue démarre (peut-être en réponse à WM_INITDIALOG) – Elemental

+0

Cela ne fonctionne pas non plus. – deb

Questions connexes