请教:回调函数的意义? 为什么要使用回调函数,它的深层意义是什么?请大家讨论讨论! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 严重同意楼上,有时候就是要用到回调,比如CListCtrl排序时的回调函数,各人对其list的数据排序会有不同的定义,所以CListCtrl提供回调函数,这样就方便多了。 回调函,即由用户自己编写,但由Windows调用的函数 回调函数,就是由你自己写的。你需要调用另外一个函数,而这个函数的其中一个参数,就是你的这个回调函数名。这样,系统在必要的时候,就会调用你写的回调函数,这样你就可以在回调函数里完成你要做的事。http://dev.csdn.net/develop/article/17/17432.shtmhttp://dev.csdn.net/develop/article/6/6535.shtmhttp://dev.csdn.net/develop/article/20/20778.shtm http://community.csdn.net/Expert/topic/4011/4011027.xml?temp=.4705774 int APIENTRY WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ){ DialogBox(hInstance,MAKEINTRESOURCE(IDD_DIALOG),NULL,(DLGPROC)MainDialogProc); hInst = hInstance; return 0;}==============BOOL CALLBACK MainDialogProc(HWND hDlg,UINT message,WPARAM wParam,LPARAM lParam){ HMENU hMenu; WORD Item = LOWORD(wParam); RECT rect; GetWindowRect(hDlg,&rect); int x = (GetSystemMetrics(SM_CXSCREEN) - (rect.right-rect.left))/2; int y = (GetSystemMetrics(SM_CYSCREEN) - (rect.bottom-rect.top))/2; switch(message) { case WM_INITDIALOG: hMenu = LoadMenu(hInst,MAKEINTRESOURCE(IDR_MENU)); SetMenu(hDlg,hMenu); return TRUE; case WM_COMMAND: switch(Item){ case ID_BT_OK: TCHAR szDN[50]; TCHAR szIP[50]; if(GetWindowText(GetDlgItem(hDlg,ID_DN),szDN,50) == 0) break; else{ // if(GetHostIPByAddr(szDN,szIP)) if(GetHostIPByName(szDN,szIP)){ SetWindowText(GetDlgItem(hDlg,ID_IP),szIP); } } break; case ID_BT_EXIT: EndDialog(hDlg,TRUE); return TRUE; case IDM_EVENT_BEGIN: hMutex = CreateMutex(NULL,TRUE,NULL); EventIO(hDlg); return TRUE; case IDM_EVENT_CLOSE: EventIOEnd(); CloseHandle(hMutex); return TRUE; } break; case WM_CLOSE: EndDialog(hDlg, TRUE); return TRUE; } return FALSE;}这里MainDialogProc就是回调函数 中断处理例程就是一种回调函数,这并不是微软独创的。在Unix/Linux下也存在类似概念的东西。主要是为了进行异步处理以及系统和程序间的交互。 回调函数是给系统用的 比如一个窗口有个函数BOOL CALLBACK MainDialogProc(HWND hDlg,UINT message,WPARAM wParam,LPARAM lParam)(就是那个回调函数) 你的程序里知道了那个函数名字 可是系统还要维护这个函数 所以就要告诉系统 这里有个回调函数麻烦你来一起处理 至于为什么要加个CALLBACK 前缀就不懂了 可能是看的清楚吧不知道讲错了没有 加CALLBACK前缀是约定参数顺序的 周末了给大家散点分 用AfxBeginThread函数生成一个线程,线程函数却没有执行 新手,不使用同步,为什么输出的结果与使用同步的输出结果一样呢? 如何创建一些公用函数? 请问多文档应用程序中打开文件会打开一个文件名的视图,如何close该视图? 尽量减少Windows默认设置下UAC弹窗的思路 如何测试一个字符串中是否有空格? 技术群找人啦 如何在vc中编程实现Oracle9i数据的导入导出 远程桌面以及录像的思路 求文本编辑器教程 『在用XMLDocument进行XML输出时,如何将各个结点自动换行和缩进?多谢,请各位帮帮忙!!』
有时候就是要用到回调,
比如CListCtrl排序时的回调函数,各人对其list的数据排序会有不同的定义,所以CListCtrl提供回调函数,这样就方便多了。
http://dev.csdn.net/develop/article/17/17432.shtm
http://dev.csdn.net/develop/article/6/6535.shtm
http://dev.csdn.net/develop/article/20/20778.shtm
LPSTR lpCmdLine, int nCmdShow )
{
DialogBox(hInstance,MAKEINTRESOURCE(IDD_DIALOG),NULL,(DLGPROC)MainDialogProc);
hInst = hInstance;
return 0;
}==============
BOOL CALLBACK MainDialogProc(HWND hDlg,UINT message,WPARAM wParam,LPARAM lParam)
{
HMENU hMenu;
WORD Item = LOWORD(wParam);
RECT rect;
GetWindowRect(hDlg,&rect);
int x = (GetSystemMetrics(SM_CXSCREEN) - (rect.right-rect.left))/2;
int y = (GetSystemMetrics(SM_CYSCREEN) - (rect.bottom-rect.top))/2;
switch(message)
{
case WM_INITDIALOG:
hMenu = LoadMenu(hInst,MAKEINTRESOURCE(IDR_MENU));
SetMenu(hDlg,hMenu);
return TRUE;
case WM_COMMAND:
switch(Item){
case ID_BT_OK:
TCHAR szDN[50];
TCHAR szIP[50];
if(GetWindowText(GetDlgItem(hDlg,ID_DN),szDN,50) == 0)
break;
else{
// if(GetHostIPByAddr(szDN,szIP))
if(GetHostIPByName(szDN,szIP)){
SetWindowText(GetDlgItem(hDlg,ID_IP),szIP);
}
}
break;
case ID_BT_EXIT:
EndDialog(hDlg,TRUE);
return TRUE;
case IDM_EVENT_BEGIN:
hMutex = CreateMutex(NULL,TRUE,NULL);
EventIO(hDlg);
return TRUE;
case IDM_EVENT_CLOSE:
EventIOEnd();
CloseHandle(hMutex);
return TRUE;
}
break;
case WM_CLOSE:
EndDialog(hDlg, TRUE);
return TRUE;
}
return FALSE;
}这里MainDialogProc就是回调函数
比如一个窗口有个函数BOOL CALLBACK MainDialogProc(HWND hDlg,UINT message,WPARAM wParam,LPARAM lParam)
(就是那个回调函数) 你的程序里知道了那个函数名字 可是系统还要维护这个函数 所以就要告诉系统 这里有个回调函数麻烦你来一起处理 至于为什么要加个CALLBACK 前缀就不懂了 可能是看的清楚吧不知道讲错了没有