1.3.3 小试牛刀--编程(www.cppentry.com)实现写邮件超级链接(5)
⑩ 定义函数SetDefaultCursor(),用于设定默认的鼠标形状,具体代码如下:
- void CHyperLink::SetDefaultCursor()
- {
- if (m_hLinkCursor == NULL) // No cursor handle - load our own
- {
- // Get the windows directory
- CString strWndDir;
- GetWindowsDirectory(strWndDir.GetBuffer(MAX_PATH), MAX_PATH);
- strWndDir.ReleaseBuffer();
-
- strWndDir += _T("\\winhlp32.exe");
- // This retrieves cursor #106 from winhlp32.exe,
- // which is a hand pointer
- HMODULE hModule = LoadLibrary(strWndDir);
- if (hModule) {
- HCURSOR hHandCursor = ::LoadCursor(hModule, MAKEINTRESOURCE(106));
- if (hHandCursor)
- m_hLinkCursor = CopyCursor(hHandCursor);
- }
- FreeLibrary(hModule);
- }
- }
⑪定义函数GetRegKey(),用于获得注册表信息,具体代码如下:- LONG CHyperLink::GetRegKey(HKEY key, LPCTSTR subkey, LPTSTR retdata)
- {
- HKEY hkey;
- LONG retval = RegOpenKeyEx(key, subkey, 0, KEY_QUERY_VALUE, &hkey);
- if (retval == ERROR_SUCCESS) {
- long datasize = MAX_PATH;
- TCHAR data[MAX_PATH];
- RegQueryValue(hkey, NULL, data, &datasize);
- lstrcpy(retdata, data);
- RegCloseKey(hkey);
- }
- return retval;
- }
⑫定义函数ReportError(),用于输出打印错误,具体代码如下:
- void CHyperLink::ReportError(int nError)
- {
- CString str;
- switch (nError) {
- case 0:
- str = "The operating system is out\nof memory or resources.";
- break;
- case SE_ERR_PNF:
- str = "The specified path was not found.";
- break;
- case SE_ERR_FNF:
- str = "The specified file was not found.";
- break;
- case ERROR_BAD_FORMAT:
- str = "The .EXE file is invalid\n(non-Win32 .EXE "
- + CString("") + "or error in .EXE image).";
- break;
- case SE_ERR_ACCESSDENIED:
- str="The operating system denied\naccess to the specified file.";
- break;
- case SE_ERR_ASSOCINCOMPLETE:
- str = "The filename association is\nincomplete or invalid.";
- break;
- case SE_ERR_DDEBUSY:
- str = "The DDE transaction could not\nbe completed because "
- + CString("")+"other DDE transactions\nwere being processed.";
- break;
- case SE_ERR_DDEFAIL:
- str = "The DDE transaction failed.";
- break;
- case SE_ERR_DDETIMEOUT:
- str = "The DDE transaction could not\nbe completed because "
- + CString("") + "the request timed out.";
- break;
- case SE_ERR_DLLNOTFOUND:
- str = "The specified dynamic-link library was not found.";
- break;
- case SE_ERR_NOASSOC:
- str = "There is no application associated\nwith the "
- + CString("") + "given filename extension.";
- break;
- case SE_ERR_OOM:
- str = "There was not enough memory to complete the operation.";
- break;
- case SE_ERR_SHARE:
- str = "A sharing violation occurred. ";
- default:
- str.Format("Unknown Error (%d) occurred.", nError);
- break;
- }
-
- str = "Unable to open hyperlink:\n\n" + str;
- AfxMessageBox(str, MB_ICONEXCLAMATION | MB_OK);
- }