// 向系统注册我们需要的消息
const UINT m_nAcItemActivateMsg = RegisterWindowMessage(_T("AC_ItemActivate"));
BOOL CMainFrame::InitAddress()
{
HWND _hWndAddressEdit = m_wndAddress.GetEditCtrl()->m_hWnd;
if(_hWndAddressEdit)
{
//设置自动完成
typedef HRESULT (CALLBACK* LPFNDLLFUNC1)(HWND ,DWORD);
HINSTANCE hIns = LoadLibrary("shlwapi.dll");
if(hIns != NULL)
{
LPFNDLLFUNC1 lpfnDllFunc1 = (LPFNDLLFUNC1)GetProcAddress(hIns, "SHAutoComplete");
if(lpfnDllFunc1!=NULL)
lpfnDllFunc1(_hWndAddressEdit, 0xe);
FreeLibrary(hIns);
}
//挂接EDIT消息回调
SetWindowLong(_hWndAddressEdit, GWL_USERDATA, (DWORD)this);
_lpfnAddressEditProc = (WNDPROC )SetWindowLong(_hWndAddressEdit, GWL_WNDPROC, (LONG)AddressEditProc);
}
return TRUE;
}
LRESULT CALLBACK CMainFrame::AddressEditProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
CMainFrame *pMainWnd = (CMainFrame*)GetWindowLong(hwnd, GWL_USERDATA);
if (!pMainWnd)
{
return 0;
}
if ((message==WM_CHAR) && (wParam==VK_RETURN) || (message==m_nAcItemActivateMsg))
{
//::MessageBox(0, _T("AddressEditProc"), NULL, MB_OK);
CString str;
pMainWnd->m_wndAddress.GetEditCtrl()->GetWindowText(str);
((CMFCIEView*)pMainWnd->GetActiveView())->Navigate2(str, 0, NULL);
return 0;
}
else
return CallWindowProc(pMainWnd->_lpfnAddressEditProc, hwnd, message, wParam, lParam);
}
231



被折叠的 条评论
为什么被折叠?



