249上位机VC MFC动态加载动态库函数
249上位机VC MFC动态加载动态库函数 功能展示 微软提供的动态库如user32.DLL有许多功能很炫函数没有申明无法直接使用,如设置窗口透明度的函数SetLayeredWindowAttributes()在VC6.0中没有申明,我们要使用就得动态的调用,当前例程实现动态获取此函数的指针,设置窗口透明度方法,效果如图,点击按钮就可设置窗口透明效果; 要点提示 获取动态库内函数的指针可以使用函数GetProcAddress()此函数检索指定的动态链接库(DLL)中的输出库函数 函数原型:FARPROCGetProcAddress(HMODULE hModule, LPCSTR lpProcName); 参数说明: 1.hModule:包含此函数的DLL模块的句柄。LoadLibrary、AfxLoadLibrary 或者GetModuleHandle函数可以返回此句柄。 2.lpProcName:包含函数名的以NULL结尾的字符串,或者指定函数的序数值。如果此参数是一个序数值,它必须在一个字的底字节,高字节必须为0。 如果函数调用成功,返回值是DLL中的输出函数地址。 如果函数调用失败,返回值是NULL。得到进一步的错误信息,可调用函数GetLastError 实现功能 1.新建基于对话框的应用程序 2.拖拽一按钮<动态加载动态库函数/使窗口透明>关联函数 - void CGkbc8Dlg::OnTransparent()
- {
- SetWindowLong(this->GetSafeHwnd(),GWL_EXSTYLE,
- GetWindowLong(this->GetSafeHwnd(),GWL_EXSTYLE)^0x80000);//0x80000让窗口具有透明特效
- HINSTANCE hInst=LoadLibrary("User32.DLL");
- if(hInst)
- {
- typedef BOOL (WINAPI*SetLayeredWindowAttributes)(HWND,COLORREF,BYTE,DWORD);
- SetLayeredWindowAttributes Fun=NULL;
- //取得SetLayeredWindowAttributes函数指针,该函数控制透明度
- Fun=(SetLayeredWindowAttributes)GetProcAddress(hInst,"SetLayeredWindowAttributes");
- if(Fun)
- Fun(this->GetSafeHwnd(),0,128,2);
- FreeLibrary(hInst);
- }
- }
复制代码0x80000 对应WS_EX_LAYERED 我们来演示下功能实现的整个过程
|