logo资料库

C++界面开发实例.pdf

第1页 / 共40页
第2页 / 共40页
第3页 / 共40页
第4页 / 共40页
第5页 / 共40页
第6页 / 共40页
第7页 / 共40页
第8页 / 共40页
资料共40页,剩余部分请下载后查看
目录
实例1 界面图案演示
实例2 创建标题栏在左边的窗口界面
实例3 创建超级链接界面
实例4 创建不规则窗口界面
实例5 创建可扩展对话框界面
实例6 创建NEO Skin窗口界面
实例7 创建Windows2000透明窗口界面
实例8 创建自画弹出式菜单界面
实例9 创建自画菜单界面
实例10 创建自画窗口背景界面
0 CCC++++++ BBBuuuiiillldddeeerrr 666...000 界界界 面面面 实实实 例例例 开开开 发发发 2002-11-25 深 圳 蔡军 生 caimouse1976@sina.com 界 面 图 案 演 示 创 建 标 题 栏 在左边 的 窗 口 界 面 创 建 超 级 连 接界 面 创 建 不 规 则 窗口界 面 创 建 可 扩 展 对话框 界 面 创 建 NEO Skin 窗 口 界 面 创 建 Windows2000 透 明 窗 口 界 面 实 例 1 实 例 2 实 例 3 实 例 4 实 例 5 实 例 6 实 例 7 实 例 8 实 例 9 创 建 自 画 弹 出式菜 单 界 面 创 建 自 画 主 菜单界 面 实 例 10 创建 自 画 窗 口 背 景 界 面
1 实 例 1 界 面 图 案 演 示 主要 用两函 数 clNone。 本实例 作 来本书 的 第一个 实 例,主 要 让大家 轻松地 学习本 书,让大家 先有一 个感觉, 编 MoveTo 和 LineTo 实现。 设 置窗口 的颜色 为 实例目 标 程其实 是 一个很 美 的事情 。 实现技 术 代码如 下 : void __fastcall TfrmMain::FormPaint(TObject *Sender) { double x1,y1,x2,y2; const int nScale = 100; Canvas->Pen->Color = clYellow;// 设 置 FORM 界 面 的画笔 颜色 。 for (int i=0; i<720; i++) { double dAngle = i*M_PI/360;//M_PI double E = nScale*(1+sin(3*dAngle)); x1 = 320+E*cos(dAngle); x2 = 320+E*cos(dAngle+M_PI/5); y1 = 240+E*sin(dAngle); y2 = 240+E*sin(dAngle+M_PI/5); 在 math.h 里 。
2 移 到 x1,y1 位置 。 从当 前位置 画 直线 到 x2,y2. exp1。然后设置窗 口的 背 CB6.0 创建 一 个应用 程 序,把 它保存 为 clNone, 设 置 FormPaint 事 件 函数, 并 加入以 上代码 就 行了 。 实现步 骤 很简单 , 用 Canvas->MoveTo(x1,y1);// Canvas->LineTo(x2,y2);// } } 实现步 骤 影颜色 为
3 实 例 2 创 建 标 题 栏 在 左 边 的窗口 界 面 实例目 标 实现 左边标 题 , 能 拖 动 的窗 口 。如 下 图所 示 : FormPaint(TObject *Sender)函数里面画上 标 题和 边 指 明 窗 口 BorderStyle 为 bsNone, 这 样 就 不 能 拉 伸 窗 , 没 有标题 和 边 实现技 术 框 。 第 二 第一步 先 框 。这 个函 数 响 应 消 息 OnPaint, 步就 是 在 当 出 现 重 画 窗 口 时 调 用 。 第 三 步就 是 响 应 WM_NCHITTEST 消 息 , 以 便 拖 动 窗口 。 当 返 回 这 个 消 息 的 结 果 为 HTCAPTION 时 , WINDOWS 就 认 为 鼠 标在标 题 框 内 , 所 以 能 拖 动 窗 口 移 动 。 实现步 骤 第一步 创 建程序 , 在 第 二 步 添 加 DrawTitle(), 代码如 下 : void __fastcall TfrmTitle::DrawTitle(void) { RECT rc; // 左边 标 题 栏 。 ::SetRect(&rc,0,0,nTitleWidth,ClientHeight); Canvas->Brush->Color = clBlue; Canvas->FillRect(rc); // 右 边 边界 。 ::SetRect(&rc,ClientWidth-2,0,ClientWidth,ClientHeight); Canvas->Brush->Color = clBlue; Canvas->FillRect(rc); // 上面 边界 。 ::SetRect(&rc,0,0,ClientWidth,2); Canvas->Brush->Color = clBlue; Canvas->FillRect(rc); // 下面 边界 。 ::SetRect(&rc,0,ClientHeight-2,ClientWidth,ClientHeight); Canvas->Brush->Color = clBlue; Object Inspector 中 设 置 BorderStyle 为 bsNone。
4 。 Canvas->FillRect(rc); // 设 置 ICON 位 置 。 ImageIcon->Left = 0; ImageIcon->Top = ClientHeight - ImageIcon->Height; // 输 出 标题 。 char* msg=Caption.c_str(); LOGFONT fontRec; memset(&fontRec,0,sizeof(LOGFONT)); fontRec.lfHeight = -13; fontRec.lfWeight = FW_NORMAL; fontRec.lfEscapement = 900; // 字 体 旋 转 90 度 。 lstrcpy(fontRec.lfFaceName," 宋 体 "); HFONT hFont=CreateFontIndirect(&fontRec);// 创 建 字 体 。 HFONT hOld=::SelectObject(Canvas->Handle,hFont);// 选中字 体 ::SetRect(&rc,0,0,nTitleWidth,ClientHeight); ::SetTextColor(Canvas->Handle,RGB(255,255,255));// 设 置 字 体 的颜色 。 // 输 出 标题 。 ::TextOut(Canvas->Handle,3,ClientHeight - ImageIcon->Height,msg,lstrlen(msg)); ::SelectObject(Canvas->Handle,hOld);// 恢 复 。 ::DeleteObject(hFont); } 第 三 步 添 加 OnNcHitTest(TMessage& tMsg)函数 , 处 理 WM_NCHITTEST 消 息 。 void TfrmTitle::OnNcHitTest(TMessage& tMsg) { TPoint pt; // 取得 鼠 标位 置 。 pt.x=LOWORD(tMsg.LParam); pt.y=HIWORD(tMsg.LParam); pt =ScreenToClient(pt);// 转 换 为 客 户 坐 标 。 RECT rc; ::SetRect(&rc,0,0,nTitleWidth,ClientHeight); if(PtInRect(&rc,pt))// 是 否 在 自 画的标 题 tMsg.Result = HTCAPTION;// else DefaultHandler(&tMsg);// } 返 回 在标 题 栏内 结 果 。 框 内 。 让 窗 口 缺 省消息 处 理 函 数 处 理 。
5 实 例 3 创建 超 级 连 接 界 面 本实 例 介 绍 如 何 创 建 的 热 点连接 ( 实例目 标 单 击 超级连 接 时 , 就 会变成 绿 的 Internet 资 源 。 如 果热 点 为 粉 红 色 , 表 示 已 经 访 问 过 , 程序的 界 面如下 : hotlink), 该连接 指 向 的 文 本 。 该热 点 连接初 始 且 鼠 标 变 为 小手形 状 , 当 点击 这些热点连接 时 , 就 可 以 打开连 接 色, 并 一 定 的 Internet 资 源 。 如 果 用 户 上 为 蓝 色, 当 鼠 标 移 动 到 热点连 接 ,就 能 可 以 访问该连 接 鼠 标移到 上 面 二 个 就 是 按 下 时 , 打 开 浏 览 器 连 接 网 页 。 第 四 个 就 是 当 已 经 连 接 了 就 字 体 不 同 的 颜色。 第 字 体 颜 色 为 蓝 色 。 网 站 。 时 ,要设 置 第一步 就 创建一 个 应 。 第 三 步就是 实 现 Label 按 件,然后 设 置 主要 有 几 个 要 点 ,第一个 就是 当 字 体 属 性 为有 下 划 线,并 设 置 按 下 连 接 后 开 始连 接 实现技 术 要设 置 鼠 标 形 状 。 第 三 个就是 当 要 改 为 粉 红 色 。 实现步 骤 第 二 步 就 设 置 鼠 标 移 动 的 消息 响 详 细 代 码 如下 : //--------------------------------------------------------------------------- __fastcall TfrmHyperLink::TfrmHyperLink(TComponent* Owner) : TForm(Owner) { m_bHyperLinked = false;// 设置 为 没 有 按 下 连 接 。 lbHyperLink->Cursor = crHandPoint;// 设 置 光 标 为 手 掌 形 状 。 } //--------------------------------------------------------------------------- // 鼠 标 进 入 响 应 。 // void __fastcall TfrmHyperLink::lbHyperLinkMouseEnter(TObject *Sender) { if(!m_bHyperLinked)// 如 果 没 有 按 下 设置颜 色 和 { lbHyperLink->Font->Color = clGreen;// } } //--------------------------------------------------------------------------- // 鼠 标 离 开 响 应 。 设 置 字 体 颜 色 为 绿 色 。 手
6 手 设 置 字 体 颜 色 为 蓝 色 // void __fastcall TfrmHyperLink::lbHyperLinkMouseLeave(TObject *Sender) { if(!m_bHyperLinked)// 如 果 没 有 按 下 设置颜 色 和 { lbHyperLink->Font->Color = clBlue;// } } //--------------------------------------------------------------------------- // 鼠 标 弹 起 。 // void __fastcall TfrmHyperLink::lbHyperLinkMouseUp(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y) { lbHyperLink->Font->Color = clFuchsia;// 设 置 字 体 颜色 为 粉 红 色 } //--------------------------------------------------------------------------- // 鼠 标 按 下 。 // void __fastcall TfrmHyperLink::lbHyperLinkMouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y) { String strUrl = lbHyperLink->Caption; //(" www.yahoo.com"); m_bHyperLinked = true; ShowMessage(" 你已经 按 // 打 开 网 站 连 接 。 ShellExecute(NULL,"open",strUrl.c_str(),NULL,NULL,SW_SHOWNORMAL); } //--------------------------------------------------------------------------- 下 连 接 ");
7 实 例 4 创 建 不 规 则 窗 口界 面 实例目 标 本例实 现 的 目 标 是 实现 如 右 边界 面 。 这 个 是一 个 不 规 则 窗口界面 , 跟普 通 那 种 窗 口 相 比 , 具 有 尝 心 悦 目 感 觉 。 实现技 术 区 域 。 SetWindowRgn API 函数 是 用来设 置窗口 的 实现步 骤 第 二 步, 加 载 图 像 , 读 入 区 域 组 ,然 后 根 据 数 组 设 置 图 像 的 区 域 , 然 后 显 示 出 来。 第 三 步 , 就 响 应 鼠 标 消 息 。 主 要 源 程 序如下 : 在 这 个 例 子 中 关 键 是 区 域 API 使 用 。 CreatePolygonRgn API 函数 是 用来创 建 组 图 像区 域 要用的 数 第一 步,先 创 建 一 多 边 形 的 区 域 。 组 。 //--------------------------------------------------------------------------- __fastcall TMainForm::TMainForm(TComponent* Owner)
分享到:
收藏