Elso kerdesre azt ajanlanam, hogy hasznald a
BOOL your_class::PreTranslateMessage(MSG* pMsg) fuggvenyt amiben szerintem
le lehet targyalni a pMsg->wParam == VK_... (VK_LCONTROL, VK_RCONTROL,
VK_DELETE, etc). Mindenesetre nezd vegig egy kicsit a
.../VC98/Include/WINUSER.H file-ot. En meg nem probaltam az altalad emlitett
billentyukombinaciot letargyalni de szerintem megoldhato.
A masodik kerdesre en pl. a kovetkezo kodot hasznalom. Pontositom, hogy nem
fogja barmilyen View-ban(MDI vagy SDI) megjeleniteni a html-t hanem az OP
altal definialt browser-t fogja beinditani az adott html oldallal. Ha
tenyleg az erdekel, hogy lehet ezt egy MDI applikacioban (pl. VC.NET
kornyezetben a help mint view) legkonnyebben megcsinalni akkor ezt is
elkuldom majd csak szolj.
void your_class::your_function()
{
CString URL(_T("anything.htm"));
HINSTANCE result = ::ShellExecute(NULL, _T("open"), URL, "valami",NULL,
SW_SHOW);
if ((UINT)result <= HINSTANCE_ERROR)
{
TCHAR key[MAX_PATH + MAX_PATH] = {_T('\0')};
TCHAR ext[_MAX_EXT] = {_T('\0')};
_splitpath(URL,NULL,NULL,NULL,ext);
if (GetRegKey(HKEY_CLASSES_ROOT, ext, key) == ERROR_SUCCESS)
{
lstrcat(key, _T("\\shell\\open\\command"));
if (GetRegKey(HKEY_CLASSES_ROOT,key,key) == ERROR_SUCCESS)
{
TCHAR *pos;
pos = _tcsstr(key, _T("\"%1\""));
if (pos == NULL)
{
pos = strstr(key, _T("%1"));
if (pos == NULL)
pos = key+lstrlen(key)-1;
else
*pos = '\0';
}
else
*pos = '\0';
lstrcat(pos, _T(" "));
lstrcat(pos, URL);
::WinExec(key,SW_SHOW);
}
}
}
}
ahol
namespace
{
LONG 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;
}
}
Remelem fog segiteni. Ha valami nem tiszta csak irj nyugottan.
Andras
|