C语言回调函数Demo - Win32版
回调函数:通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数。回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应。
#include <windows.h>
#include "resource.h"LRESULT CALLBACK WindowProcedure (HWND, UINT, WPARAM, LPARAM);HINSTANCE hInst;
TCHAR szClassName[] = TEXT("callbackDemo");typedef struct gfun{int (*pfun)(int);
}gfun;int myfun(int , HDC );int WINAPI
WinMain (HINSTANCE hThisInstance,HINSTANCE hPrevInstance,LPSTR lpszArgument,int nFunsterStil)
{HWND hwnd;MSG messages;WNDCLASSEX wincl;hInst = hThisInstance;wincl.hInstance = hThisInstance;wincl.lpszClassName = szClassName;wincl.lpfnWndProc = WindowProcedure;wincl.style = CS_DBLCLKS;wincl.cbSize = sizeof (WNDCLASSEX);wincl.hIcon = LoadIcon (NULL, IDI_APPLICATION);wincl.hIconSm = LoadIcon (NULL, IDI_APPLICATION);wincl.hCursor = LoadCursor (NULL, IDC_ARROW);wincl.lpszMenuName = MAKEINTRESOURCE (IDC_CALLBACKDEMO);wincl.cbClsExtra = 0;wincl.cbWndExtra = 0;wincl.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);if (!RegisterClassEx (&wincl))return 0;hwnd = CreateWindowEx (0,szClassName,TEXT("C 回调函数Demo"),WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,CW_USEDEFAULT,300,200,HWND_DESKTOP,NULL,hThisInstance,NULL);ShowWindow (hwnd, nFunsterStil);while (GetMessage (&messages, NULL, 0, 0)){TranslateMessage(&messages);DispatchMessage(&messages);}return messages.wParam;
}LRESULT CALLBACK
WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{PAINTSTRUCT ps;HDC hdc;RECT rt; char szBuffer[100]; int ret;gfun gf;switch (message){case WM_COMMAND:switch (LOWORD(wParam)){case IDM_callback: hdc=GetDC(hwnd);gf.pfun = myfun;ret = rt_data(100,gf.pfun,hdc);wsprintf(szBuffer, "return data:%d",ret);TextOut(hdc,100,100,szBuffer,lstrlen(szBuffer));break;case IDM_ABOUT:MessageBox (hwnd, TEXT ("callbackDemo v1.0\nCopyright (C) 2020\n by bo"),TEXT ("callbackDemo"), MB_OK | MB_ICONINFORMATION);break;case IDM_EXIT:DestroyWindow(hwnd);break;default:return DefWindowProc(hwnd, message, wParam, lParam); }break;case WM_CREATE:break;case WM_PAINT:hdc = BeginPaint(hwnd, &ps); GetClientRect(hwnd, &rt); EndPaint(hwnd, &ps);break;case WM_DESTROY:PostQuitMessage (0);break;default:return DefWindowProc (hwnd, message, wParam, lParam);}return 0;
}int myfun(int data, HDC hdc)
{char szBuffer[100]; wsprintf(szBuffer, "get data:%d",data);TextOut(hdc,100,50,szBuffer,lstrlen(szBuffer));return (data*2);
}
int rt_data(int data,int (*tr_fun)(), HDC hdc)
{return ((*tr_fun)(data,hdc));
}
运行如下;
将结构体中的函数指针指向了myfun函数地址,在回调函数中将函数指针gf.pfun作为rt_data(int data,int (*tr_fun)())函数的参数即为int (*tr_fun)();回调函数中的return (*tr_fun)(data)相当于对指针进行了简引用,返回这个指针指向地址的内容值。
回调函数的意义
可以把调用者与被调用者分开,所以调用者不关心谁是被调用者。它只需知道存在一个具有特定原型和限制条件的被调用函数。
回调可用于通知机制。
用户和开发者之间的概念;用户是实现myfun这个函数,开发者是实现rt_data函数,根据需求用户将myfun函数以参数的形式传入开发者的rt_data函数中,rt_data函数就能返回给相应的数据给用户,开发者不用告诉用户它实现了什么,用户也并不知道开发者怎么实现,用户只用传入自己的函数,便可以得到开发者实现的函数返回值,开发者可以将内容封装起来,将头文件以及库文件提供给用户。
工程;
资源和头文件;
#include "resource.h"
#include <windows.h>/
//
// Menu
//IDC_CALLBACKDEMO MENU
BEGINPOPUP "&File"BEGINMENUITEM "回调函数Demo", IDM_callbackMENUITEM "E&xit", IDM_EXITENDPOPUP "&Help"BEGINMENUITEM "&About ...", IDM_ABOUTEND
END
#define IDM_EXIT 10001
#define IDM_ABOUT 10002#define IDC_CALLBACKDEMO 10101
#define IDD_ABOUTBOX 10102
#define IDM_callback 40001
C语言回调函数Demo - Win32版相关推荐
- C语言回调函数demo(帮助理解)以海康isapiExternDemo回调函数为例
参考文章:c语言指针回调函数最全demo实例(简单明了一看就会) 回更 20220303 \demo\base\isapiExternDemo\isapiExternDemo.c 这边海康定义了一个回 ...
- C语言 回调函数 callback - C语言零基础入门教程
目录 一.回调函数原理 二.回调函数简介 1.函数指针 2.指针函数 3.回调函数解释 三.回调函数实战 四.回调函数使用总结 五.猜你喜欢 零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 ...
- c语言 is函数,关于C语言回调函数的详解~
原标题:关于C语言回调函数的详解~ 01 什么是回调函数? 回调函数,光听名字就比普通函数要高大上一些,那到底什么是回调函数呢?恕我读得书少,没有在那本书上看到关于回调函数的定义.我在百度上搜了一下, ...
- c语言回调函数_C语言学习第26篇---函数与指针分析 回调函数
函数类型的概念 1.C语言函数也是有类型的 2.函数类型由函数返回值,参数类型,参数个数共同决定 int add(int i,int j) 的类型是 int(int , int) 3.C语言中通过ty ...
- 一文搞懂C语言回调函数
转载自:https://segmentfault.com/a/1190000008293902?utm_source=tag-newest 博主:Rdou Typing 来源:segmentfault ...
- C语言回调函数callback
一.定义和使用场合 回调函数是指 使用者自己定义一个函数,实现这个函数的程序内容,然后把这个函数(入口地址)作为参数传入别人(或系统)的函数中,由别人(或系统)的函数在运行时来调用的函数.函数是你实现 ...
- C语言回调函数的定义和写法
C语言中的回调函数(Callback Function) 1 定义和使用场合 回调函数是指 使用者自己定义一个函数,实现这个函数的程序内容,然后把这个函数(入口地址)作为参数传入别人(或系统)的函数中 ...
- c语言timer linux 回调函数_C语言回调函数详解
1. 什么是回调函数? 回调函数,光听名字就比普通函数要高大上一些,那到底什么是回调函数呢?恕我读得书少,没有在那本书上看到关于回调函数的定义.我在百度上搜了一下,发现众说纷纭,有很大一部分都是使用类 ...
- C 语言回调函数详解
1. 什么是回调函数? 回调函数,光听名字就比普通函数要高大上一些,那到底什么是回调函数呢?网络上众说纷纭,有很大一部分都是使用类似这么一个场景来说明:A君去B君店里买东西,恰好缺货,A君留下号码给B ...
最新文章
- php红盾,红盾查询网_ubaike.cn - 小七发外链
- Windows Embedded CE 6.0开发初体验(二)CE开发环境 收藏
- 微信浏览器的html5页面显示配置等问题汇集 1,禁止微信浏览器分享页面链接 (定点更新)...
- RGBD论文阅读笔记
- P7726-天体探测仪(Astral Detector)【构造】
- java bitmap取出数据库_bitmap一般如何取出其所表示的数据(以java为例)
- tp5 前台页面获取url链接里的参数,如下
- 请你努力成为一名优秀的软件工程师,拒绝做优秀的码农!
- [转]编程之美数组分割问题
- 防火墙虚拟系统互访配置实例
- repeater 的编辑功能
- 【优化求解】基于matlab遗传算法求解红绿灯管理优化问题【含Matlab源码 262期】
- 微型计算机的构成部件6,谈谈微机的主要部件与指标
- Amazon Dynamo论文中文版
- android表情功能开发
- 三维空间——点线面关系
- 赛灵思 PL 和 PS IBIS 模型解码器
- oracle开机启动监听,配置Oracle数据库和监听随Linux系统自启动
- getch()、getche()、kbhit()的使用
- 防止糖尿病的天然胰岛素——普洱熟茶
热门文章
- 关于中断处理程序中的关中断函数disable_irq和disable_irq_nosync
- 业余学python数据挖掘怎么赚钱_0基础转行学Python,学到什么地步能拿到月薪15k+?...
- SQL优化—— 优化insert语句
- 应用程序启动器选项卡以及页面内容的设置
- SpringMVC源码——未完待续
- Chrome 技术篇-json查看,json格式化,JSONView插件
- C# WinForm获取程序所在路径方法
- opencv中使用K-近邻分类算法KNN
- 自定义模板类(循环队列)
- 语音写出(wavwrite)