windows日程学习(七)

1、GradientFill函数可以对特定的矩形区域或者三角形区域进行渐变颜色的填充。
函数原型:BOOL GradientFill( In HDC hdc,In PTRIVERTEX pVertex,In ULONG nVertex,In PVOID pMesh,In ULONG nMesh, In ULONG ulMode);
hdc:指向目标设备环境的句柄。
pVertex:指向TRIVERTEX结构数组的指针,该数组中的每项定义了三角形顶点。
dwNumVertex:顶点数目。
pMesh:三角形模式下的GRADIENT_TRIANGLE结构数组,或矩形模式下的GRADIENT_RECT结构数组。
dwNumMesh:参数pMesh中的成员数目(这些成员是三角形或矩形)。
dwMode:指定倾斜填充模式。该参数可以包含下列值,这些值的含义为:
GRADIENT_FILL_RECT_H:在该模式下,两个端点表示一个矩形。该矩形被定义成左右边界具有固定颜色(由TRIVERTEX结构指定)。GDI从上至下插入颜色,并填充内部区域。
GRADIENT_FILL_RECT_V:在该模式下,两个端点表示一个矩形。该矩形定义其顶部和底部边界的颜色为固定值(通过TRIVERTEX结构指定),GDI从顶至底部边界插入颜色,并填充内部区域。
GRADIENT_FILL_TRIANGLE:在该模式下,TRIVERTEX结构数组以及描述单个三角形的数组索引序列被传给GDI。GDI在三角形顶点之间进行线性插值,并填充内部区域。在24和32位/像素模式下,绘图是直接进行。在16、8、4和1位/像素模式中进行抖动处理。
2、InsertMenuItem函数在菜单的指定位置插入一个新菜单项。
函数原型:BOOL WINAPI InsertMenuItem(HMENU hMenu,UINT ultem,BOOL fByPosition,LPMENUITEMINFO lpmii );
hMenu:新菜单项将被插入其中的菜单的句柄。
ultem:在其前面插入新菜单项的菜单项的标识符或位置。此参数的含义取决于参数fByPosition的值。
fByFosition:用于确定ultem的含义的值。如果此参数为FALSE,Ultem表示菜单项的标识符。否则,ultem 表示菜单项的位置。
lpmii:指向结构MENUITEMINFO的指针,该结构中包含了新菜单项的信息。
3、CheckMenuRadioItem函数的功能是校核一个指定的菜单项并使其成为一个圆按钮项。
hMenu:包含一组菜单项的菜单的句柄。
idFirst:菜单组里第一个菜单项的标识符或位置。
idLast:菜单组里最后一个菜单项的标识符或位置。
idCheck:要校核的菜单项的标识符或位置。
uFlag:指定idFirst,idLast,idCheck含义的值。如果此参数为MF_BYCOMMAND,则其他参数指定菜单项标识符。如果此参数为MF_BYPOSITION,则其他参数指定菜单项位置。
4、右键菜单:
1、用资源编辑器创建菜单。

2、当我们在窗口上按下鼠标右键,当系统处理WM_RBUTTONUP时会向我们的应用程序发送一条WM_CONTEXTMENU消息,我们通过响应这条消息来决定是否弹出菜单。

3、计算菜单弹出的位置,一般在我们鼠标指针的右下方,该坐标是基于屏幕的,不是窗口的。

4、调用TrackPopupMenu函数显示快捷菜单。

5、因为这种菜单是不属于某个窗口的,它的内存资源不会在窗口销毁时被回收,因此,在TrackPopupMenu返回后要调用DestroyMenu来销毁菜单的资源,释放内存。
case WM_CONTEXTMENU:
	{
		RECT rect;
		POINT pt;
		// 获取鼠标右击是的坐标
		pt.x = GET_X_LPARAM(lParam);
		pt.y = GET_Y_LPARAM(lParam);
		//获取客户区域大小
		GetClientRect((HWND)wParam, &rect);
		//把屏幕坐标转为客户区坐标
		ScreenToClient((HWND)wParam, &pt);
		//判断点是否位于客户区域内
		if(PtInRect(&rect, pt))
		{
			//加载菜单资源
			HMENU hroot = LoadMenu((HINSTANCE)GetWindowLongPtr(hwnd, GWLP_HINSTANCE), MAKEINTRESOURCE(IDR_CONTEXT));
			if(hroot)
			{
				// 获取第一个弹出菜单
				HMENU hpop = GetSubMenu(hroot,0);
				// 把客户区坐标还原为屏幕坐标
				ClientToScreen((HWND)wParam, &pt);
				//显示快捷菜单
				TrackPopupMenu(hpop,
					TPM_LEFTALIGN | TPM_TOPALIGN | TPM_RIGHTBUTTON,
					pt.x,
					pt.y,
					0,
					(HWND)wParam,
					NULL);
				// 用完后要销毁菜单资源
				DestroyMenu(hroot);
			}
		}
	}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值