用GradientFill时出错

tsys2000 2005-11-16 09:04:32
我在win32下用GradientFill,(在新建的空项目中)

出现如下错误

xx error LNK2019: 无法解析的外部符号 __imp__GradientFill@24 ,该符号在函数 "long __stdcall WndProc(struct HWND__ *,unsigned int,unsigned int,long)" (?WndProc@@YGJPAUHWND__@@IIJ@Z) 中被引用

渐变 fatal error LNK1120: 1 个无法解析的外部命令

...全文
273 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
菜牛 2005-11-17
  • 打赏
  • 举报
回复
看你好像已经包含头文件了,链接包含msimg32.lib即可。


另外,这和MFC/Win32有什么关系?
tsys2000 2005-11-16
  • 打赏
  • 举报
回复
在mfc中不用
hinst_msimg32 = LoadLibrary( "msimg32.dll" );
...

win32中有没有简单的办法?
vcmute 2005-11-16
  • 打赏
  • 举报
回复
以下代码主要来源于CodeProject上一个用渐变色填充DC的static控件中的一部分代码。

这是要使用的函数原型:
typedef UINT (CALLBACK* LPGNDLLFUNC)(HDC,CONST PTRIVERTEX,DWORD,CONST PVOID,DWORD,DWORD);
HINSTANCE hinst_msimg32 = NULL;
static LPGNDLLFUNC pdllfunc_GradientFill;



初始化:
hinst_msimg32 = LoadLibrary( "msimg32.dll" );
if( hinst_msimg32 )
{
pdllfunc_GradientFill = ((LPGNDLLFUNC) GetProcAddress( hinst_msimg32, "GradientFill" ));
}

函数定义:
/*
* 在pDCMem上以FillMode模式填充矩形区域pRect
* pDcMem为要绘制的DC
* pRect为矩形区域
* FillMode包括横向填充与纵向填充两个
* crHiColor为渐变色的一端,另一端默认为白色
* bReverse是否逆向填充,即由白色渐变到cfHiColor还是由crHiColor渐变到白色
*/
void DrawGradientFill(CDC* pDCMem, CRect* pRect, BackFillMode FillMode, COLORREF crHiColor, BOOL bReverse)
{
TRIVERTEX rcVertex[2];
COLORREF crLoColor = RGB(255,255,255);

if (bReverse)
{
crLoColor = crHiColor;
crHiColor = RGB(255,255,255);
}
rcVertex[0].x=pRect->left;
rcVertex[0].y=pRect->top;
rcVertex[0].Red=GetRValue(crLoColor)<<8;
rcVertex[0].Green=GetGValue(crLoColor)<<8;
rcVertex[0].Blue=GetBValue(crLoColor)<<8;
rcVertex[0].Alpha=0x0000;
rcVertex[1].x=pRect->right;
rcVertex[1].y=pRect->bottom;
rcVertex[1].Red=GetRValue(crHiColor)<<8;
rcVertex[1].Green=GetGValue(crHiColor)<<8;
rcVertex[1].Blue=GetBValue(crHiColor)<<8;
rcVertex[1].Alpha=0;

GRADIENT_RECT grect;
grect.UpperLeft=0;
grect.LowerRight=1;

(pdllfunc_GradientFill)((HDC) *pDCMem ,(CONST PTRIVERTEX)rcVertex,(DWORD)2,(CONST PVOID)&grect,(DWORD)1,
(DWORD)(FillMode == HGradient ? GRADIENT_FILL_RECT_H : GRADIENT_FILL_RECT_V) );
}

要实现自定义两种颜色的渐变,稍加修改即可。
MSDN上有GradientFill函数说明,填充任意多边形可采用类似方式,具体函数和使用方法MSDN上也有。
vcmute 2005-11-16
  • 打赏
  • 举报
回复
初始化:
hinst_msimg32 = LoadLibrary( "msimg32.dll" );
if( hinst_msimg32 )
{
pdllfunc_GradientFill = ((LPGNDLLFUNC) GetProcAddress( hinst_msimg32, "GradientFill" ));
}

19,468

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧