比如说在标准WINDOWS程序中窗口的消息处理函数就一般为回调函数.
(生成windows createwindow(或createwindowex)要求一个WNDCLASS类指针,wndclass中的lpfnWndProc就要求一个回调函数.
LRESULT CALLBACK CTest::WndProc(HWND hWnd,UINT uiMsg, WPARAM wParam, LPARAM lParam)
{
switch (uiMsg)
{
; ; ; ; ; ; ; ; ; ; ;//消息处理
}
return DefWindowProc(hWnd, uiMsg, wParam, lParam);
}
STDMETHODIMP CTest::CreateViewWindow(LPSHELLVIEW pPrevView,
; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ;LPCFOLDERSETTINGS lpfs,
; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ;LPSHELLBROWSER psb,
; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ;LPRECT prcView,
; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ;HWND *phWnd)
{
WNDCLASS wc = { 0 };
*phWnd = NULL;
// Register the class once
if(!GetClassInfo(g_hInstance, NAMESPACEVIEW_CLASS, &wc))
{
wc.style ; ; ; ; ;= CS_HREDRAW | CS_VREDRAW;
wc.lpfnWndProc ; ;= (WNDPROC) nameSpaceWndProc;
wc.cbClsExtra ; ; = NULL;
wc.cbWndExtra ; ; = NULL;
wc.hInstance ; ; ;= g_hInstance;
wc.hIcon ; ; ; ; ;= NULL;
wc.hCursor ; ; ; ;= LoadCursor(NULL, IDC_ARROW);
wc.hbrBackground ;= (HBRUSH)(COLOR_WINDOW + 1);
wc.lpszMenuName ; = NULL;
wc.lpszClassName ;= NAMESPACEVIEW_CLASS;
if (RegisterClass(&wc) == 0)
{
return E_FAIL;
}
}
// Store the browser pointer
*phWnd = CreateWindowEx(0, NAMESPACEVIEW_CLASS,NULL, WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS,
prcView->left, prcView->top,
prcView->right - prcView->left,
prcView->bottom - prcView->top,
m_hWndParent,
NULL,
g_hInstance,
(LPVOID) this);
if(NULL == *phWnd)
{
return E_FAIL;
}
return S_OK;
}