当前位置: 首页 > news >正文

咨询行业网站制作深圳开发app的软件公司

咨询行业网站制作,深圳开发app的软件公司,二级域名格式,电商网站制作方案文章目录 GDI对象画笔和画刷来开发控件梯形边框的按钮控件CMainDlg.hCMainDlg.cppCLadderCtrl.hCLadderCtrl.cpp 矩形边框的三态按钮控件 CToolTipCtrl开发动静态提示CMainDlg.hCMainDlg.cppCLadderCtrl.hCLadderCtrl.cpp: 实现文件 矩形边框的三态按钮控件 CToolTipCtrl开发动… 文章目录 GDI对象画笔和画刷来开发控件梯形边框的按钮控件CMainDlg.hCMainDlg.cppCLadderCtrl.hCLadderCtrl.cpp 矩形边框的三态按钮控件 CToolTipCtrl开发动静态提示CMainDlg.hCMainDlg.cppCLadderCtrl.hCLadderCtrl.cpp: 实现文件 矩形边框的三态按钮控件 CToolTipCtrl开发动态提示CMainDlg.hCMainDlg.cppCLadderCtrl.hCLadderCtrl.cpp 附录 GDI对象画笔和画刷来开发控件 梯形边框的按钮控件 CMainDlg.h class CMainDlg : public CDialogEx { // 构造CLadderCtrl m_ladd;protected:virtual BOOL OnInitDialog();afx_msg void OnPaint(); public:afx_msg void OnSize(UINT nType, int cx, int cy); };CMainDlg.cpp void CMainDlg::OnSize(UINT nType, int cx, int cy) {CDialogEx::OnSize(nType, cx, cy);if (m_ladd){m_ladd.SetWindowPos(NULL, 0, cy - 20, cx, cy, SWP_NOZORDER);} }BOOL CMainDlg::OnInitDialog(){CDialogEx::OnInitDialog();SetIcon(m_hIcon, TRUE); // 设置大图标SetIcon(m_hIcon, FALSE); // 设置小图标CRect rect;GetClientRect(rect);rect.top rect.bottom - 20;m_ladd.Create(WS_CHILD | WS_VISIBLE, rect, this,8888);m_ladd.InsertItem(0, _T(组建));m_ladd.InsertItem(1, _T(调试));m_ladd.InsertItem(2, _T(在文件1中查找));m_ladd.InsertItem(3, _T(在文件2中查找));m_ladd.InsertItem(4, _T(结果));return TRUE; // 除非将焦点设置到控件否则返回 TRUE }CLadderCtrl.h class CLadderCtrl : public CWnd{DECLARE_DYNAMIC(CLadderCtrl)CStringArray m_ds; //存储一组字符串 使用Add方法添加新的字符串使用RemoveAt方法删除指定位置的字符串使用GetAt方法获取特定位置的字符串等。int m_nIndex{}; CBrush m_br, m_brSel;CFont m_font, m_fontSel; public:CLadderCtrl();virtual ~CLadderCtrl();BOOL Create(DWORD dwStyle, CRect rect, CWnd* pParent, int nID);LONG InsertItem(int nItem, LPCTSTR lpszItem);int SetCurSel(int nItem);int GetCurSel() const;int GetItemCount() const;BOOL DeleteAllItems(); BOOL DeleteItem(int nItem); };CLadderCtrl.cpp CLadderCtrl::CLadderCtrl(){m_br.CreateSolidBrush(GetSysColor(COLOR_BTNFACE));m_brSel.CreateSolidBrush(GetSysColor(COLOR_HIGHLIGHT));HFONT hfont (HFONT)GetStockObject(DEFAULT_GUI_FONT); // GetStockObject 返回的是void* 要给转为具体类型LOGFONT lf;GetObject(hfont, sizeof(lf), lf);m_font.CreateFontIndirect(lf);lf.lfWeight 700;m_fontSel.CreateFontIndirect(lf); } CLadderCtrl::~CLadderCtrl() {} BOOL CLadderCtrl::Create(DWORD dwStyle, CRect rect, CWnd* pParent, int nID){return CWnd::Create(NULL, NULL, dwStyle, rect, pParent, nID); }LONG CLadderCtrl::InsertItem(int nItem, LPCTSTR lpszItem) {m_ds.InsertAt(nItem,lpszItem);return nItem; } int CLadderCtrl::SetCurSel(int nItem) {return 0; } int CLadderCtrl::GetCurSel() const {return 0; }int CLadderCtrl::GetItemCount() const {return (int)m_ds.GetCount(); } BOOL CLadderCtrl::DeleteAllItems() {m_ds.RemoveAll();return TRUE; } BOOL CLadderCtrl::DeleteItem(int nItem) {m_ds.RemoveAt(nItem);return TRUE; }void CLadderCtrl::OnPaint() {CPaintDC dc(this); // device context for paintingCRect rect;GetClientRect(rect);dc.SetBkMode(TRANSPARENT);dc.FillSolidRect(rect, GetSysColor(COLOR_INFOBK));int i -1, nCount (int) m_ds.GetCount();const int H rect.Height(); //创建一个宽度为矩形高度的四分之一高度为整个矩形高度的矩形rc。CRect rc{ H/4,0,0,rect.bottom };dc.SelectObject(m_br);POINT ptSel[4];CString sSel;CRect rSel;dc.SelectObject(m_font); //宋体9 就是默认字体/*HFONT hFont (HFONT)GetStockObject(DEFAULT_GUI_FONT);LOGFONT lf;GetObject(hFont, sizeof(lf), lf);*/while (inCount){CString str m_ds[i];CSize size dc.GetTextExtent(str); //获取字符串str在设备上下文dc中的宽度和高度并将结果存储在CSize对象size中rc.right rc.left size.cx H; //左边界加上字符串宽度和一个常量H 可以保证矩形rc的宽度至少能够容纳字符串并且在右边留出一个宽度为常量H的空白区域POINT pts[] { {rc.left-H/4,rc.top},{rc.right H / 4,rc.top},{rc.right - H / 4,rc.bottom},{rc.left H / 4,rc.bottom} };if (i!m_nIndex){dc.Polygon(pts, _countof(pts));//dc.Rectangle(rc);dc.DrawText(str, rc, DT_CENTER | DT_VCENTER | DT_SINGLELINE);}else{memcpy(ptSel, pts, sizeof(pts));sSel str;rSel rc;}rc.left rc.right;}dc.SelectObject(m_brSel);dc.Polygon(ptSel, _countof(ptSel)); //要覆盖二次绘画dc.SelectObject(m_fontSel);dc.DrawText(sSel, rSel, DT_CENTER | DT_VCENTER | DT_SINGLELINE);} // dc.TextOut(0, 0, _T(测试系统颜色));void CLadderCtrl::OnLButtonDown(UINT nFlags, CPoint point) //和上面算法一致 这个用来算出位置 {CWnd::OnLButtonDown(nFlags, point);CClientDC dc(this);dc.SelectStockObject(DEFAULT_GUI_FONT);int i -1, nCount (int)m_ds.GetCount();CRect rect;GetClientRect(rect);CRect rc{ 0,0,0,rect.bottom };while (inCount) {CString str m_ds[i];CSize size dc.GetTextExtent(str);rc.right rc.left size.cx rect.Height();dc.SelectObject(i m_nIndex ? m_brSel : m_br);if (rc.PtInRect(point)){if (i ! m_nIndex) //去除无效点击 {m_nIndex i;Invalidate(FALSE);}break;}rc.left rc.right;} }矩形边框的三态按钮控件 CToolTipCtrl开发动静态提示 CMainDlg.h #include CLadderCtrl.h class CMainDlg : public CDialogEx { // 构造CLadderCtrl m_ladd; CToolTipCtrl m_tip; public:CMainDlg(CWnd* pParent nullptr); // 标准构造函数 public:afx_msg void OnSize(UINT nType, int cx, int cy);virtual BOOL PreTranslateMessage(MSG* pMsg); };CMainDlg.cpp BOOL CMainDlg::OnInitDialog() {CDialogEx::OnInitDialog();CRect rect;GetClientRect(rect);rect.top rect.bottom - 20;m_ladd.Create(WS_CHILD | WS_VISIBLE, rect, this,8888);m_ladd.InsertItem(0, _T(组建));m_ladd.InsertItem(1, _T(调试));m_ladd.InsertItem(2, _T(在文件1中查找));m_ladd.InsertItem(3, _T(在文件2中查找));m_ladd.InsertItem(4, _T(结果));m_tip.Create(this);m_tip.AddTool(m_ladd, _T(没想到吧));return TRUE; // 除非将焦点设置到控件否则返回 TRUE }void CMainDlg::OnSize(UINT nType, int cx, int cy) {CDialogEx::OnSize(nType, cx, cy);if (m_ladd)m_ladd.SetWindowPos(NULL, 0, cy - 20, cx, 20, SWP_NOZORDER); } BOOL CMainDlg::PreTranslateMessage(MSG* pMsg) //皇军的岗楼 {m_tip.RelayEvent(pMsg);return CDialogEx::PreTranslateMessage(pMsg); }CLadderCtrl.h class CLadderCtrl : public CWnd {DECLARE_DYNAMIC(CLadderCtrl)CStringArray m_ds;int m_nIndex{};int m_nTrack{};CBrush m_br, m_brSel,m_brTrack; //三态按钮 三态控件 没有选中色(普通) 选中色 放在上面的框色(追踪态)CBrush m_brBack;CPen m_pen;int GetIndex(CPoint point); public:CLadderCtrl();virtual ~CLadderCtrl();BOOL Create(DWORD dwStyle, CRect rect, CWnd* pParent, int nID);LONG InsertItem(int nItem, LPCTSTR lpszItem);int SetCurSel(int nItem);int GetCurSel() const;int GetItemCount() const;BOOL DeleteAllItems();BOOL DeleteItem(int nItem); // 对话框数据 #ifdef AFX_DESIGN_TIMEenum { IDD IDD_MAIN_DIALOG }; #endifprotected:virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持DECLARE_MESSAGE_MAP() public:afx_msg void OnPaint();afx_msg void OnLButtonDown(UINT nFlags, CPoint point);afx_msg void OnMouseMove(UINT nFlags, CPoint point); };CLadderCtrl.cpp: 实现文件 #include pch.h #include CreatControl.h #include afxdialogex.h #include CLadderCtrl.h CLadderCtrl::CLadderCtrl() //有对应的构造函数可以在定义时直接给予初始化{} {m_br.CreateSolidBrush(RGB(64,86,140));m_brSel.CreateSolidBrush(RGB(230,245,255)); m_brTrack.CreateSolidBrush(RGB(187, 194, 241));m_brBack.CreateSolidBrush(RGB(93, 107, 153)); //默认的背景m_pen.CreatePen(PS_SOLID, 1, RGB(93, 107, 153)); } CLadderCtrl::~CLadderCtrl() { }BOOL CLadderCtrl::Create(DWORD dwStyle, CRect rect, CWnd* pParent, int nID) {return CWnd::Create(NULL, NULL, dwStyle, rect, pParent, nID); } LONG CLadderCtrl::InsertItem(int nItem, LPCTSTR lpszItem) {m_ds.InsertAt(nItem,lpszItem);return nItem; } int CLadderCtrl::SetCurSel(int nItem) {ASSERT(nItem -1 nItem m_ds.GetCount());m_nIndex nItem;Invalidate(FALSE);return 0; } int CLadderCtrl::GetCurSel() const {return m_nIndex; }int CLadderCtrl::GetItemCount() const {return (int)m_ds.GetCount(); }BOOL CLadderCtrl::DeleteAllItems() {m_ds.RemoveAll();return TRUE; }BOOL CLadderCtrl::DeleteItem(int nItem) {m_ds.RemoveAt(nItem);return TRUE; }void CLadderCtrl::DoDataExchange(CDataExchange* pDX) {CWnd::DoDataExchange(pDX); }BEGIN_MESSAGE_MAP(CLadderCtrl, CWnd)ON_WM_PAINT()ON_WM_LBUTTONDOWN()ON_WM_MOUSEMOVE() END_MESSAGE_MAP()void CLadderCtrl::OnPaint() {CPaintDC dc(this); // device context for paintingCRect rect;GetClientRect(rect);dc.SetBkMode(TRANSPARENT);dc.FillRect(rect,m_brBack);int i -1, nCount (int) m_ds.GetCount();int nLeft 0;CRect rc{ 0,0,0,rect.bottom };CFont* pFont GetFont();dc.SelectStockObject(DEFAULT_GUI_FONT); //宋体9 就是默认字体dc.SelectObject(m_pen);/*HFONT hFont (HFONT)GetStockObject(DEFAULT_GUI_FONT);LOGFONT lf;GetObject(hFont, sizeof(lf), lf);*/while (inCount){CString str m_ds[i];CSize size dc.GetTextExtent(str);rc.right rc.left size.cx rect.Height();if (i m_nIndex){dc.SelectObject(m_brSel);dc.SetTextColor(GetSysColor(COLOR_WINDOWTEXT));}else if (i m_nTrack){dc.SelectObject(m_brTrack);dc.SetTextColor(GetSysColor(COLOR_WINDOWTEXT));}else{dc.SetTextColor(GetSysColor(COLOR_HIGHLIGHTTEXT));dc.SelectObject(m_br);}//dc.SelectObject(i m_nIndex ? m_brSel:m_br); dc.Rectangle(rc);dc.DrawText(str, rc, DT_CENTER | DT_VCENTER | DT_SINGLELINE);rc.left rc.right;}} // dc.TextOut(0, 0, _T(测试系统颜色));int CLadderCtrl::GetIndex(CPoint point) {CClientDC dc(this);dc.SelectStockObject(DEFAULT_GUI_FONT);int i -1, nCount (int)m_ds.GetCount();CRect rect;GetClientRect(rect);CRect rc{ 0,0,0,rect.bottom };while (i nCount){CString str m_ds[i];CSize size dc.GetTextExtent(str);rc.right rc.left size.cx rect.Height();dc.SelectObject(i m_nIndex ? m_brSel : m_br);if (rc.PtInRect(point)){return i;}rc.left rc.right;}return -1; }void CLadderCtrl::OnLButtonDown(UINT nFlags, CPoint point) //和上面算法一致 这个用来算出位置 {int nIndex GetIndex(point);if (nIndex ! m_nIndex) //去除无效点击 {m_nIndex nIndex;Invalidate(FALSE);}CWnd::OnLButtonDown(nFlags, point); }void CLadderCtrl::OnMouseMove(UINT nFlags, CPoint point) {int nIndex GetIndex(point);if (nIndex m_nIndex) return;if (m_nTrack!nIndex) {m_nTrack nIndex;Invalidate(FALSE);}CWnd::OnMouseMove(nFlags, point); }矩形边框的三态按钮控件 CToolTipCtrl开发动态提示 本次只添加了与静态提示不同之处的代码 CMainDlg.h #include CLadderCtrl.h class CMainDlg : public CDialogEx { // 构造CLadderCtrl m_ladd; CToolTipCtrl m_tip; public:CMainDlg(CWnd* pParent nullptr); // 标准构造函数public:afx_msg void OnSize(UINT nType, int cx, int cy);virtual BOOL PreTranslateMessage(MSG* pMsg);afx_msg BOOL SetTipText(UINT id, NMHDR* pHdr, LRESULT* pResult);//反射型消息 手动创建的 一消息一函数一控件 一IDafx_msg BOOL OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message); };CMainDlg.cpp 设置动态文字的函数 BOOL CMainDlg::SetTipText(UINT id, NMHDR* pHdr, LRESULT* pResult){int nIndex m_ladd.GetTrack();if (nIndex 0 || nIndex m_ladd.GetItemCount())return FALSE;TOOLTIPTEXT* pText (TOOLTIPTEXT*)pHdr;if (pText-uFlags TTF_IDISHWND){auto nID (int)pHdr-idFrom;CString str m_ladd.GetItemText(nIndex);_tcscpy_s(pText-szText, 80, str);return TRUE;}return FALSE;return 0; }BOOL CMainDlg::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message){switch (pWnd-GetDlgCtrlID()) {case 8888:{static int nTrack -1; // 用来看它是否切换 全局变量int n m_ladd.GetTrack();if (nTrack !n ){ //切换算法nTrack n;m_tip.Update();}}break;}return CDialogEx::OnSetCursor(pWnd, nHitTest, message); }CLadderCtrl.h class CLadderCtrl : public CWnd{CStringArray m_ds;int m_nIndex{};int m_nTrack{};CBrush m_br, m_brSel,m_brTrack; //三态按钮 没有选中色(普通) 选中色 放在上面的框色(追踪态)CBrush m_brBack;int GetIndex(CPoint point); public:int GetTrack() const{return m_nTrack; //拿到你追踪到的是几号}CString GetItemText(int nIndex) const{return m_ds[nIndex]; //拿到的对应的索引来获取文字}CLadderCtrl();CLadderCtrl.cpp int CLadderCtrl::GetIndex(CPoint point) {CClientDC dc(this);dc.SelectStockObject(DEFAULT_GUI_FONT);int i -1, nCount (int)m_ds.GetCount();CRect rect;GetClientRect(rect);CRect rc{ 0,0,0,rect.bottom };while (i nCount){CString str m_ds[i];CSize size dc.GetTextExtent(str);rc.right rc.left size.cx rect.Height();dc.SelectObject(i m_nIndex ? m_brSel : m_br);if (rc.PtInRect(point)){return i;}rc.left rc.right;}return -1; }void CLadderCtrl::OnLButtonDown(UINT nFlags, CPoint point) //和上面算法一致 这个用来算出位置 {int nIndex GetIndex(point);if (nIndex ! m_nIndex) //去除无效点击 {m_nIndex nIndex;Invalidate(FALSE);}CWnd::OnLButtonDown(nFlags, point); }void CLadderCtrl::OnMouseMove(UINT nFlags, CPoint point) {int nIndex GetIndex(point);//if (nIndex m_nIndex) // return;if (m_nTrack!nIndex) {m_nTrack nIndex;Invalidate(FALSE);}CWnd::OnMouseMove(nFlags, point); }附录 CDC::FillSolidRect无边框的纯色填充 GetSysColor获取系统常用的颜色。 GetStockObjectAPI 获取系统预定义对象 CDC::SelectStockObject:选择系统预定义对象。 来自于APIGetStockObjectGDI对象的构造函数CFile的构造函数 a)CPen的构造函数 CPen(int nPenStyle, int nWidth, COLORREF crColor); CPen pen;pen.CreatePen(PS_XXX...); 两句合成一句就是CPen pen(PS_XXX...);b)CBrush的构造函数CBrush(COLORREF crColor); // CreateSolidBrushCBrush(int nIndex, COLORREF crColor); // CreateHatchBrushexplicit CBrush(CBitmap* pBitmap); // CreatePatternBrushMouseMove 进入任意控件都不会理你 除非回到主窗口范围内 OnSetCursor 不论在什么控件都会显示出来 还可以switch getDlgCtrlID 任何控件都会执行
http://www.hkea.cn/news/14503222/

相关文章:

  • 怎么样建设网站wordpress中小企业
  • 征婚网站上教人做恒指期货网站建设sem
  • 网站tdk设置界面WordPress下如何用页面做侧边栏
  • 二级域名 电子商务网站推广方案广州注册公司无地址怎么办
  • 网站建设实践考试试题网站后台登录代码
  • 做网站排名收益WordPress当前菜单高亮
  • 网站开发视频资源放哪儿网站推广花费多少钱
  • 赣州建设网站公司衡阳百度seo
  • 中国轻工建设公司网站个人网页制作完整教程
  • 境外网站服务器住房和建设局官网
  • 建设部网站上标准合同商水县住房城乡建设网站
  • 满屏网站做多大尺寸wordpress 改语言
  • 吉安网站建设公司网站建设自查及整改报告
  • 网站建设公司管理流程如何解析域名
  • 怎样用模板建网站wordpress滑动解锁
  • win2003 iis配置网站免费发布信息平台有哪些
  • 沙漠风网站建设6wordpress网站布置视频
  • 临沂网站推广排名切图网站
  • 蚌埠建设学校网站icann 域名注册网站
  • 有域名怎样建设网站兰州seo新站优化招商
  • 网站建设的目标和需求分析网站两侧对联广告图片
  • 深圳网站制作哪里找邢台做网站找谁
  • 四川建设公司网站腾讯企点下载
  • 专业做网站公司哪家技术好做唯品客网站的感想
  • 陕西建设官方网站丹东网页制作
  • 在那里建立公司网站深圳有哪些传媒公司
  • 响应式做的好的网站阿里云esc服务器 怎么做网站
  • dedecms做视频网站北京网络推广平台
  • org后缀的网站无锡做网站选优易信
  • 池州网站优化公司网站建设技术团队有多重要性