(强烈推荐)毕业论文设计_基于VC++的图像处理系统设计与实现(4)

2018-11-26 22:24

类用于设计菜单,用户只要从该类派生一个子类,然后改写MeasureItem方法,设置菜单项的高度和宽度;改写DrawItem方法,根据菜单项的不同状态,绘制不同效果的菜单项就可以了。具体设计如下:

(1) 从CMenu类派生一个子类CCustomMenu。

(2) 定义一个菜单项结构CMenuItem,记录菜单项的信息。代码如下:

定义一个结构,记录菜单项的详细信息 Struct CMenuItem {

CString m_Menutext; 菜单项的文本 UINTm_ImageIndex; 菜单项图像索引

Int m_MenuType ; 菜单项的类型 -2:顶层菜单,

-1:弹出式菜单,0:分隔条,其他:普通菜单

(3) 向CCustomMenu类中添加成员变量。

(4) 在CCustomMenu类的构造函数中初始化成员变量。 CCustomMenu::CCustomMenu()

{

m_Index = 0; 初始化整型变量 m_MenuList = NULL; 初始化菜单列表 m_SelTopColor = RGB(193, 210, 238); 初始化顶层菜单颜 m_ItemCount = 0; 初始化菜单项数

m_RandColor = FALSE; 是否采用随机颜色

}

(5) 在CCustomMenu类的析构函数中释放成员变量占据的堆空间。

CCustomMenu::~CCustomMenu() {

if (m_ItemCount > 0) 如果菜单项>0,则释放菜

单列表

delete []m_MenuList; }

(6) 向CCustomMenu类中添加GetAllItemCount方法,获取菜单项

的数量,当前流程图如下:

(7) 向CCustomMenu类中添加AttachMenu方法,附加菜单句柄到

CCustomMenu类对象上

BOOL CCustomMenu::AttatchMenu(HMENU TRUE; }

(8)向CCustomMenu类中添加SetMenuItemInfo方法,将每个菜单项关联一个CMenuItem结构对象。

(9)向CCustomMenu类中添加GetTopMenuWidth方法,获取顶层菜单的高度。流程图如下:

(10)向CCustomMenu类中添加GetClientMenuRgn方法,获取菜单栏中

的非菜单项区域。流程图如下:

获取菜单栏中非菜单项区域

HRGN CCustomMenu::GetClientMenuRgn()

MENUBARINFO MenuInfo; 定义菜单项信息对象

memset(&MenuInfo,0,sizeof(MENUBARINFO)); 初始化菜单项信息

MenuInfo.cbSize = sizeof(MENUBARINFO); 设置菜单项信息结构的大小

GetMenuBarInfo(AfxGetMainWnd()->m_ HRGN[MenuCount];

定义一个选区指针,记录菜单项选区

CRect winRC; 定义一个区域对象 AfxGetMainWnd()->GetWindowRect(winRC); 获取主窗口区域 for (int j=0; j

CombineRgn(retRgn,MenuRgn,MenuClientRgn,RGN_DIFF); for ( j=0; j

(11)向CCustomMenu类中添加SetMenuItemText方法,绘制菜单项文本。 void

CCustomMenu::SetMenuItemText(CDC

*pDC,

LPSTR

=

new

strMenuText, CRect Rect) {

Rect.DeflateRect(20,0);

pDC->DrawText(strMenuText,Rect,DT_SINGLELINE|DT_VCENTER|DT_LEFT); }

(12)向CCustomMenu类中添加DrawTopMenuBk方法,绘制顶层菜单的背景颜色。

(13)向

CCustomMenu类中添加DrawSepMenu方法,绘制菜单分隔

条。

void CCustomMenu::DrawSepMenu(CDC *pDC, CRect Rect) { }

(14)向CCustomMenu类中添加DrawMenuBk方法,绘制菜单项的背景颜色。

void CCustomMenu::DrawMenuBk(CDC *pDC, CRect Rect, COLORREF SrcColor, COLORREF DesColor, BOOL State)

{

if (State) {

pDC->Rectangle(Rect); Rect.DeflateRect(1,1); int r1,g1,b1;

读取渐变起点的颜色值 r1 = GetRValue(SrcColor); g1 = GetGValue(SrcColor); b1 = GetBValue(SrcColor); int r2,g2,b2;

读取渐变终点的颜色值 r2 = GetRValue(DesColor); g2 = GetGValue(DesColor); b2 = GetBValue(DesColor); float r3,g3,b3;

菜单区域水平方向每个点RGB值应该变

化的度(范围)

} else

CPen* pOldPen ;

for (int i=Rect.top; i

r = r1+(int)r3*(i-Rect.top); g = g1+(int)g3*(i-Rect.top); b = b1+ (int)b3*(i-Rect.top); CPen pen (PS_SOLID,1,RGB(r,g,b)); pOldPen = pDC->SelectObject(&pen); pDC->MoveTo(Rect.left,i); pDC->LineTo(Rect.right,i); pDC->SelectObject(pOldPen);

r3 = ((float)(r2-r1)) (float)(Rect.Height()); g3 = (float)(g2-g1)(float)(Rect.Height()); b3 = (float)(b2-b1)(float)(Rect.Height()); COLORREF r,g,b;

菜单区域水平方向每个点的颜色


(强烈推荐)毕业论文设计_基于VC++的图像处理系统设计与实现(4).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:最新AIS评分与ISS评分

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: