利用CJ60lib开发visual studio风格用户界面程序
来源:互联网 发布:家具图纸设计软件 编辑:程序博客网 时间:2024/06/06 15:48
1、新建多文档程序VisualStudio,视图类的基类选择CHtmlView,finish之后根据上节内容添加CJ60lib设置,导入位图资源。
2、NewClass 继承自CControlBar,类CControlBar是所有控件条类(CStatusBar、CToolBar、CDialogBar、CReBar和COleResizeBar)的基类。
控件条窗口通常是父框架窗口的子窗口,并属于框架窗口的客户视图区或MDI客户。CControlBar对象采用父窗口客户矩形区的参数来定位。它会通知父窗口客户区中还有多少未占用的空间。创建基于CWnd的派生类CMyControlBar:打开ClassWizard,为以上创建的资源添加一个以CWnd为基类的派生类(因为ClassWizard没有将CControlBar列在基类目录清单中,所以用户只能先以CWnd类派生)再修改派生类以CControlBar为基类,添加宏IDC_LIST_CTRL。
添加成员变量
public:CListCtrl m_ListCtrl;
#define IDC_LIST_CTRL 1000BEGIN_MESSAGE_MAP(CMyBarBottom, CControlBar)//{{AFX_MSG_MAP(CMyBarBottom)// NOTE - the ClassWizard will add and remove mapping macros here.//}}AFX_MSG_MAPEND_MESSAGE_MAP()
添加windows消息WM_CREATE和WM_WINDOWPOSCHANGED
static int _gColText[] ={IDS_COL_1,IDS_COL_2,IDS_COL_3};static int _gColSize[] ={100,250,250};static CString _gListText[] ={_T("test one"),_T("test two"),_T("test three")};
int CMyBarBottom::OnCreate(LPCREATESTRUCT lpCreateStruct) {if (CControlBar::OnCreate(lpCreateStruct) == -1)return -1;// TODO: Add your specialized creation code hereif (!m_ListCtrl.Create (WS_CHILD|WS_VISIBLE|LVS_REPORT,CRect(0,0,0,0), this, IDC_LIST_CTRL)){TRACE0("Failed to create view for CMyBarLeft\n");return -1;}m_ListCtrl.ModifyStyleEx(0, WS_EX_CLIENTEDGE);AddExStyle (LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES|LVS_EX_CHECKBOXES);BuildColumns(3, _gColSize, _gColText);for (int i = 0; i < 5; ++i)FormatList (_gListText);return 0;}
void CMyBarBottom::OnWindowPosChanged(WINDOWPOS FAR* lpwndpos) {CControlBar::OnWindowPosChanged(lpwndpos);// TODO: Add your message handler code hereif (IsFloating()) {m_ListCtrl.MoveWindow( 5, 5, lpwndpos->cx-10, lpwndpos->cy-10 );}else if (IsHorzDocked()) {m_ListCtrl.MoveWindow( 17, 3, lpwndpos->cx-25, lpwndpos->cy-17 );}else {m_ListCtrl.MoveWindow( 3, 17, lpwndpos->cx-17, lpwndpos->cy-30 );}}
void CMyBarBottom::AddExStyle(DWORD dwNewStyle){// Returns the current extended style ( a DWORD ).DWORD dwStyle = ::SendMessage (m_ListCtrl.m_hWnd, LVM_GETEXTENDEDLISTVIEWSTYLE, 0, 0);// Add the full row select and grid line style to the existing extended styles.dwStyle |= dwNewStyle;// Sets the current extended style ( a DWORD ).::SendMessage (m_ListCtrl.m_hWnd, LVM_SETEXTENDEDLISTVIEWSTYLE, 0, dwStyle);}
void CMyBarBottom::BuildColumns(int nCols, int *nWidth, int *iCol){ASSERT(nCols);ASSERT(nWidth);ASSERT(iCol);ASSERT(m_ListCtrl);//insert columnsint i;LV_COLUMN lvc;lvc.mask = LVCF_FMT | LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM;CStringstrTemp;for(i = 0; i < nCols; i++){lvc.iSubItem = i;strTemp.LoadString(iCol[i]);lvc.pszText = (char*)(LPCTSTR)strTemp;lvc.cx = nWidth[i];lvc.fmt = LVCFMT_LEFT;m_ListCtrl.InsertColumn(i,&lvc);}}
void CMyBarBottom::FormatList(CString *csText){intnI = m_ListCtrl.GetItemCount();LV_ITEMlvi;if (csText){lvi.mask = LVIF_TEXT | LVIF_STATE;lvi.iItem = nI;lvi.iSubItem = 0;lvi.iImage = 0;lvi.stateMask = LVIS_STATEIMAGEMASK;lvi.state = INDEXTOSTATEIMAGEMASK(1);lvi.pszText = (char*)(LPCTSTR)csText[0];int result = m_ListCtrl.InsertItem(&lvi);if (result != -1){SetLVCheck (nI, TRUE);m_ListCtrl.SetItemText(nI, 1, csText[1]);m_ListCtrl.SetItemText(nI, 2, csText[2]);}}}
void CMyBarBottom::SetLVCheck(WPARAM ItemIndex, BOOL bCheck){LV_ITEM lvi;lvi.stateMask = LVIS_STATEIMAGEMASK;lvi.state = UINT((int(bCheck) + 1) << 12);::SendMessage (m_ListCtrl.m_hWnd, LVM_SETITEMSTATE, (WPARAM)ItemIndex,(LPARAM)(LV_ITEM FAR*)&lvi);}
3、新建三个继承自CTreeView的类,CTreeViewClass, CTreeViewResource 和CTreeViewFile类,从MFCClass选择,将来会放到标签页,代表类视图、资源视图、文件视图。
给三个View类都添加如下成员变量
// Operationspublic:CTreeCtrl* m_TreeCtrl;CImageList m_ImageList;三个View类都添加添加消息WM_CREATE、=TVN_ITEMEXPANDING、=TVN_SELCHANGED消息响应
=TVN_ITEMEXPANDING、=TVN_SELCHANGED消息响应不用改动。
4、
给CTreeViewClass添加静态变量和WM_CREATE消息响应
在树形控件中每一个结点都有一个句柄(HTREEITEM),同时添加结点时必须提供的参数是该结点的父结点句柄,(其中根Root结点只有一个,既不可以添加也不可以删除)利用
HTREEITEM InsertItem( LPCTSTR lpszItem,HTREEITEM hParent = TVI_ROOT, HTREEITEM hInsertAfter = TVI_LAST );可以添加一个结点,pszItem为显示的字符,hParent代表父结点的句柄,当前添加的结点会排在hInsertAfter表示的结点的后面,返回值为当前创建的结点的句柄。
m_TreeCtrl = &GetTreeCtrl();这里的&是取地址用的,将一个地址赋值给pCtrl,进行树形控件的初始化。
static CString csTree[] ={_T("Demo classes"),//父项_T("CClassName"),//一级子项_T("Globals")//子项};int CTreeViewClass::OnCreate(LPCREATESTRUCT lpCreateStruct) {if (CTreeView::OnCreate(lpCreateStruct) == -1)return -1;// TODO: Add your specialized creation code herem_TreeCtrl = &GetTreeCtrl();// 为树形控件创建图像列表m_ImageList.Create (IDB_IL_CLASS, 16, 1, RGB(0,255,0));m_TreeCtrl->SetImageList (&m_ImageList, TVSIL_NORMAL);// 添加父项HTREEITEM htItem = m_TreeCtrl->InsertItem(csTree[0]);m_TreeCtrl->SetItemState( htItem, TVIS_BOLD, TVIS_BOLD );//添加一级子项for( int i = 1; i < 8; i++ ) {m_TreeCtrl->InsertItem (csTree[1], 1, 1, htItem, TVI_LAST);}//添加子项m_TreeCtrl->InsertItem (csTree[2], 2, 3, htItem, TVI_LAST);m_TreeCtrl->Expand(htItem, TVE_EXPAND);//展开return 0;}
CTreeViewFile类
static CString csTree[] ={_T("Workspace 'demo': 1 project(s)"),_T("Demo files"),_T("File Folder")};int CTreeViewFile::OnCreate(LPCREATESTRUCT lpCreateStruct) {if (CTreeView::OnCreate(lpCreateStruct) == -1)return -1;// TODO: Add your specialized creation code herem_TreeCtrl = &GetTreeCtrl();// 为树形控件创建图像列表m_ImageList.Create (IDB_IL_FILE, 16, 1, RGB(0,255,0));m_TreeCtrl->SetImageList (&m_ImageList, TVSIL_NORMAL);// 添加父项粗体HTREEITEM htiParent = m_TreeCtrl->InsertItem (csTree[0]);HTREEITEM htiChild; // 子项htiChild = m_TreeCtrl->InsertItem (csTree[1], 1, 1, htiParent, TVI_LAST);m_TreeCtrl->SetItemState (htiChild, TVIS_BOLD, TVIS_BOLD);//添加子项for (int i = 1; i < 4; i++) {m_TreeCtrl->InsertItem (csTree[2], 2, 3, htiChild, TVI_LAST);}m_TreeCtrl->Expand (htiParent, TVE_EXPAND);m_TreeCtrl->Expand (htiChild, TVE_EXPAND);//以上为添加的代码return 0;}
CTreeViewResources
static CString csTree[] ={_T("Demo resources"),_T("Accelerator"),_T("Bitmap"),_T("Dialog"),_T("Icon"),_T("Menu"),_T("String Table"),_T("Toolbar"),_T("Version")};int CTreeViewsResource::OnCreate(LPCREATESTRUCT lpCreateStruct) {if (CTreeView::OnCreate(lpCreateStruct) == -1)return -1;// TODO: Add your specialized creation code herem_TreeCtrl = &GetTreeCtrl();m_ImageList.Create (IDB_IL_RSRC, 16, 1, RGB(0,255,0));m_TreeCtrl->SetImageList (&m_ImageList, TVSIL_NORMAL);HTREEITEM htItem = m_TreeCtrl->InsertItem (csTree[0], 1, 1);m_TreeCtrl->SetItemState (htItem, TVIS_BOLD, TVIS_BOLD);for (int i = 1; i < 9; i++) {m_TreeCtrl->InsertItem (csTree[i], 0, 1, htItem, TVI_LAST);}m_TreeCtrl->Expand (htItem, TVE_EXPAND);return 0;}
6.在CMainFrame
.h添加头文件
#endif // _MSC_VER >= 1000#include "MyBarBottom.h"
.cpp添加头文件
#include "TreeViewClass.h"#include "TreeViewFile.h"#include "TreeViewResources.h"
添加成员变量
protected: // control bar embedded membersCStatusBar m_wndStatusBar;CToolBarm_wndToolBar;//新增CImageListm_ImageList;CImageList m_TabImages;CMyBarBottom m_wndOutput;CTabCtrlBar m_wndWorkspace;
在OnCreate函数return 0;之前添加如下代码
// Install cool menus.InstallCoolMenus(this, IDR_MAINFRAME);// Create the image list to be used with the control bars.m_ImageList.Create(IDB_IMAGELIST, 13, 1, RGB(0,255,0));// CG: The following block was inserted by the 'Dialog Bar' component{m_wndWorkspace.SetBtnImageList (&m_ImageList);m_wndWorkspace.SetMenuID(IDR_POPUP);// Initialize dialog bar m_wndWorkspaceif (!m_wndWorkspace.Create(this, CG_ID_VIEW_WORKSPACE,_T("Workspace"), CSize(220,200))){TRACE0("Failed to create dialog bar m_wndWorkspace\n");return -1;// fail to create}// Add the views to the tab control.m_wndWorkspace.AddView(_T("Class"), RUNTIME_CLASS(CTreeViewClass));m_wndWorkspace.AddView(_T("Resource"), RUNTIME_CLASS(CTreeViewResource));m_wndWorkspace.AddView(_T("Files"), RUNTIME_CLASS(CTreeViewFile));// Define the image list to use with the tab controlm_TabImages.Create (IDB_IL_TAB, 16, 1, RGB(0,255,0));m_wndWorkspace.SetTabImageList(&m_TabImages); // allow bar to be resized when floating m_wndWorkspace.SetBarStyle(m_wndWorkspace.GetBarStyle() | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC);m_wndWorkspace.EnableDocking(CBRS_ALIGN_ANY);EnableDocking(CBRS_ALIGN_ANY);DockControlBar(&m_wndWorkspace, AFX_IDW_DOCKBAR_LEFT);}// CG: The following block was inserted by the 'Dialog Bar' component{m_wndOutput.SetBtnImageList (&m_ImageList);m_wndOutput.SetMenuID(IDR_POPUP);// Initialize dialog bar m_wndOutputif (!m_wndOutput.Create(this, CG_ID_VIEW_OUTPUT,_T("Output"), CSize(200,100))){TRACE0("Failed to create dialog bar m_wndOutput\n");return -1;// fail to create} // allow bar to be resized when floating m_wndOutput.SetBarStyle(m_wndOutput.GetBarStyle() | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC);m_wndOutput.EnableDocking(CBRS_ALIGN_ANY);EnableDocking(CBRS_ALIGN_ANY);DockControlBar(&m_wndOutput, AFX_IDW_DOCKBAR_BOTTOM);}
return 0;
- 利用CJ60lib开发visual studio风格用户界面程序
- 开发Visual Studio风格的用户界面--MagicLibrary使用指南
- 开发Visual Studio风格的用户界面--MagicLibrary使用指南
- Visual Studio 2008开发的MFC程序使用系统风格
- 关于使Visual Studio 2005/2008开发的程序具有XP风格的问题(转)
- 关于使Visual Studio 2005/2008开发的MFC程序具有XP风格的问题
- 关于使Visual Studio 2005/2008开发的MFC程序具有XP风格的问题
- 关于使Visual Studio 2005/2008开发的程序具有XP风格的问题
- 关于使Visual Studio 2005/2008/2010开发的MFC程序具有XP风格的问题
- 【Visual Studio风格开发系列 - 可视化界面设计】利用 .NET Framework 2.0 创建并宿主自定义的设计(全部图)
- 利用Visual Studio制作安装程序教程
- 【Visual Studio风格开发系列 - WinForm】WinForm 控件开发基础
- 利用Visual Studio 2005开发的程序缺少DLL无法运行的解决方法之一
- 利用Visual GDB在Visual Studio中进行Android开发
- 新建工程设置 CJ60lib开发
- 用Visual Studio 2005进行程序开发
- 使用Visual Studio 2008 开发php程序
- 使用Visual Studio 2005开发Qt程序
- 教你把「显示桌面」快捷键 找回来!
- 利用jquery框架中ajax实现前台与struts2中action交互
- Android中Service与Thread的区别
- @interface
- 运行unix网络编程的的第一个例子
- 利用CJ60lib开发visual studio风格用户界面程序
- 17-5:LinkedHashSet有序且为链表,HashSet无序
- mysql client build
- hibernate tips3
- 欧几里德算法
- MFC中的几种播放声音的方法
- 引用
- 基于ARM的nucleus plus的执行
- 文件系统direct io 和buffer io