工控编程吧
标题:
249上位机VC MFC动态加载动态库函数
[打印本页]
作者:
qq263946146
时间:
2016-3-4 21:19
标题:
249上位机VC MFC动态加载动态库函数
(, 下载次数: 3)
上传
点击文件名下载附件
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
我们来演示下功能实现的整个过程
[iqiyi]http://player.video.qiyi.com/781b65e57338e8d6151e40034a831a15/0/0/w_19rt047ald.swf-albumId=5429469709-tvId=5429469709-isPurchase=0-cnId=12[/iqiyi]
(, 下载次数: 0)
上传
点击文件名下载附件
[note]1[/note]
欢迎光临 工控编程吧 (https://www.gkbc8.com/)
Powered by Discuz! X3.4