做wincc项目时,如果做热线帮助的话,我认为有下列几个层次: 初级:在画面中用文本来编写,用热键或按钮调出帮助画面; 中级:编译*.hlp文件或*.chm文件,用热键或按钮调出windows格式的帮助; 高级:编译*.hlp文件或*.chm文件,用C语言实现上下文相关的帮助,根据画面上不同图元显示不同的帮助主题; 各位大侠认为对不对? 第二种方式直接运行*.chm文件,例如: Programe x *ec ut e("C:\\WINDOWS\\hh.exe c:\\calc.chm") 比较简单,关键是两点: 一、编译一个好看的*.chm文件; 二、当WINCC项目运行时,如果屏蔽了Ctrl+Alt+Del键,可能会出现多次打开*.chm文件的现象。解决方法是检测程序是否已经运行,已经运行的话,将其设为前台显示;如果尚未运行,则运行它,例如: HWND Handle= NULL; Handle= FindWindow("OMAIN",NULL); if(Handle) { ShowWindow(Handle, SW_MINIMIZE); // This entry is only necessary for Windows 2000 ShowWindow ( Handle, SW_SHOWNORMAL ); SetForegroundWindow(Handle); } else Programe x *ec ut e("C:\\MSOffice.97\\Office\\ACCESS.EXE");
实现第三种所谓的图文相关的帮助其实并不难。有VB或DELPHI编程经验的同行一定记得很多控件有HelpType和HelpContext属性吧。用C语言直接调用HLP文件,实现上下文相关的帮助,直接跳到你所需的页面,也很简单: #pragma code("user32.dll") BOOL WinHelpA(hwnd, lpszHelpFile, fuCommand, dwData); #pragma code() #define HELP_CONTENTS 0x0003L void WinHelpApi() { HWND hwnd; /* handle of window requesting help */ ch* ar HelpFile[255]; UINT fuCommand; /* type of help */ DWORD dwData; /* additional data */ BOOL bRetVal; LPCTSTR lpszHelp; lpszHelp = HelpFile; strcpy(HelpFile, "c:\\Win.95\\Help\\Calc.hlp"); hwnd = FindWindow("PDLRTisAliveAndWaitsForYou","WinCC Runtime - "); fuCommand = HELP_CONTENTS; dwData = 0L; bRetVal=WinHelpA((DWORD) hwnd,(DWORD) lpszHelp, fuCommand, dwData); printf("hwnd: %d \r\n",hwnd); printf("HelpFile: %s \r\n",HelpFile); printf("bRetVal: %d \r\n",bRetVal); } 其实困难的倒是编辑图文并茂的.hlp文件,因为你要计划好各个主题,并在WINCC的不同地方调用他们 |