void CShortcut::FormatKeyLabel(VirtualKeyName* pVirtualKeyNames,BYTE bKey,BYTE bModifiers,BOOL bScancode,CStringW& str) { if (bKey==0) { str.LoadString(IDS_SHORTCUTNONE); return; } // Formatting modifiers if (bModifiers&MOD_WIN) str.LoadString(IDS_SHORTCUTMODEXT); else str.Empty(); if (bModifiers&MOD_CONTROL) str.AddString(IDS_SHORTCUTMODCTRL); if (bModifiers&MOD_ALT) str.AddString(IDS_SHORTCUTMODALT); if (bModifiers&MOD_SHIFT) str.AddString(IDS_SHORTCUTMODSHIFT); if (bScancode) { CStringW str2; str2.Format(IDS_SHORTCUTSCANCODE,(int)bKey); str << str2; return; } int i; for (i=0;pVirtualKeyNames[i].bKey!=0 && pVirtualKeyNames[i].bKey!=bKey;i++); if (pVirtualKeyNames[i].iFriendlyNameId!=0) { str.AddString(pVirtualKeyNames[i].iFriendlyNameId); return; } BYTE pKeyState[256]; ZeroMemory(pKeyState,256); WORD wChar; int nRet=ToAscii(bKey,0,pKeyState,&wChar,0); if (nRet==1) { MakeUpper((LPSTR)&wChar,1); str << char(wChar); } else if (nRet==2) { MakeUpper((LPSTR)&wChar,2); str << (LPSTR(&wChar))[0] << (LPSTR(&wChar))[0]; } else if (pVirtualKeyNames[i].pName!=NULL) str << pVirtualKeyNames[i].pName; else str << (int) bKey; }
BOOL CBrowsersToolbarDlg::OnToolTipNotify(UINT id, NMHDR *pNMHDR, LRESULT *pResult) { // need to handle both ANSI and UNICODE versions of the message TOOLTIPTEXTA* pTTTA = (TOOLTIPTEXTA*) pNMHDR; TOOLTIPTEXTW* pTTTW = (TOOLTIPTEXTW*) pNMHDR; UINT_PTR nID = pNMHDR->idFrom; if (pNMHDR->code == TTN_NEEDTEXTA && (pTTTA->uFlags & TTF_IDISHWND) || pNMHDR->code == TTN_NEEDTEXTW && (pTTTW->uFlags & TTF_IDISHWND)) { // idFrom is actually the HWND of the tool nID = ::GetDlgCtrlID((HWND) nID); } if (pNMHDR->code == TTN_NEEDTEXTA) { CStringA strTipText; strTipText.LoadString((UINT) nID); strcpy_s(pTTTA->szText, strTipText); } else { CStringW strTipText; strTipText.LoadString((UINT) nID); wcscpy_s(pTTTW->szText, strTipText); } *pResult = 0; return TRUE; // message was handled }
std::wstring wloadString(UINT resid) { CStringW s; s.LoadString(resid); return s.GetBuffer(); }