2009-09-03 43 views
1

经过一些处理后,我的程序显示一个消息框,指出您可以读取日志文件以了解更多关于已完成的操作。我想显示文件的链接,而不是它的名称。这是如何完成的?链接到MessageBox中的文件VC++ 2008 Windows xp

非常感谢

UPDATE:

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 

这是在其中创建SYSLINK控制RC文件的代码。

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; 
} 

这是使用SetWindowText函数...

对话框不显示。如果在对话框中嵌入了一个Syslink控件。我没有使用MFC ...这可能是问题吗?

回答

1

你可以提供一个按钮将调用Win32函数ShellExecute打开日志文件。

+0

我想在这种情况下,我不能使用消息框,但自定义对话框。 – deb 2009-09-03 12:16:06

+0

不,你可以。 '如果(的MessageBox(0, “你想打开日志文件?”, “确认”,MB_OKCANCEL | MB_ICONQUESTION)== IDOK)的ShellExecute(0,NULL, “C:\\ your_log_here.txt”,NULL, NULL,SW_SHOWDEFAULT);' – pingw33n 2009-09-03 13:38:00

+0

最后,我让它成为你的方式,因为它更简单,更简单。 – deb 2009-09-15 12:45:15

1

恕我直言,你有两个选择:

A)从头

让自己的对话框

B)使用一个线程钩子(SetWindowsHookEx函数),并赶在MessageBox()的初始化,调整它一点并添加自己的控件(XP和更高版本有一个link control,支持基本的HTML。该控件也存在于2000年,但没有文档,并有不同的类名)

+0

很多Windows编程就像这样 - 只是在微软提供的界限之外迈出一小步,并且努力量增加了一个数量级。 – 2009-09-03 14:32:42

0

在我看来,最直接的解决方案将是您自己的对话框看起来像标准的消息窗口框并使用链接控件(引用)由Anders在本主题中编辑)代替标准的静态文本。

我觉得这比SetWindowHookEx路线更加健壮。

+0

有没有什么办法使这个对话框显示日志文件的名字... dinamically,我的意思是,显示日志名称...并不总是相同的名称(这取决于执行时间) – deb 2009-09-14 10:10:23

+0

应该是只要在链接控件上使用setwindowtext就可以在对话框启动时设置控件上的文本(可能是为了响应WM_INITDIALOG) – Elemental 2009-09-14 13:44:52

+0

它也不起作用。 – deb 2009-09-15 11:16:37