不用splitter控件 简单实现对mfc对话框的分割的方法
来源:互联网 发布:linux设置中文编码 编辑:程序博客网 时间:2024/06/13 09:15
不用splitter控件 简单实现对mfc对话框的分割的方法
直接贴上源代码主要部分吧
这个是基于对话框的工程 进行对话框的分割实现
只是相应了三个消息函数,看一下就会明白的
我空间资源里边有现成的工程代码可以下载运行
.cpp 文件
// spliteDlg.cpp : implementation file//#include "stdafx.h"#include "splite.h"#include "spliteDlg.h"#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE[] = __FILE__;#endif/////////////////////////////////////////////////////////////////////////////// CSpliteDlg dialogCSpliteDlg::CSpliteDlg(CWnd* pParent /*=NULL*/): CDialog(CSpliteDlg::IDD, pParent){//{{AFX_DATA_INIT(CSpliteDlg)//}}AFX_DATA_INIT// Note that LoadIcon does not require a subsequent DestroyIcon in Win32m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);m_SplitCursor = LoadCursor(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDC_CURSOR_SPLIT));}void CSpliteDlg::DoDataExchange(CDataExchange* pDX){CDialog::DoDataExchange(pDX);//{{AFX_DATA_MAP(CSpliteDlg)DDX_Control(pDX, IDC_LIST, m_edit);DDX_Control(pDX, IDC_TREE, m_tree);//}}AFX_DATA_MAP}BEGIN_MESSAGE_MAP(CSpliteDlg, CDialog)//{{AFX_MSG_MAP(CSpliteDlg)ON_WM_MOUSEMOVE()ON_WM_LBUTTONDOWN()ON_WM_LBUTTONUP()ON_WM_SIZE()//}}AFX_MSG_MAPEND_MESSAGE_MAP()/////////////////////////////////////////////////////////////////////////////// CSpliteDlg message handlers#define SIZEBAR 2// Space BTW Tree and EditBOOL CSpliteDlg::OnInitDialog(){CDialog::OnInitDialog();// Set the icon for this dialog. The framework does this automatically// when the application's main window is not a dialogSetIcon(m_hIcon, TRUE);// Set big iconSetIcon(m_hIcon, FALSE);// Set small iconCRect rect ;GetClientRect( &rect );// TODO: Add extra initialization hereCRect treepos ;m_tree.GetClientRect( treepos );m_tree.MoveWindow(0, 0, treepos.Width(), rect.Height() );m_edit.MoveWindow(treepos.Width() +SIZEBAR , 0, rect.Width()-(treepos.Width() +SIZEBAR), rect.Height() );return TRUE; // return TRUE unless you set the focus to a control}void CSpliteDlg::OnMouseMove(UINT nFlags, CPoint point) {// TODO: Add your message handler code here and/or call defaultCRect treepos ;m_tree.GetWindowRect( &treepos );ScreenToClient( &treepos );CRect editpos ;m_edit.GetWindowRect( &editpos );ScreenToClient( &editpos );CRect rc;rc.left = treepos.right;rc.right = editpos.left;rc.top = treepos.top;rc.bottom = treepos.bottom;CRect rect;GetClientRect( &rect );if ( rect.PtInRect(point) ){SetCursor(m_SplitCursor); //设置鼠标光标形状if ( nFlags & MK_LBUTTON ){ResizeWindows(point.x, rect.right-rect.left);}}else{if(m_bButtonDown) {m_bButtonDown = FALSE;ReleaseCapture();}}CDialog::OnMouseMove(nFlags, point);}void CSpliteDlg::ResizeWindows( int CxBarAt, int len ){CRect treepos ;m_tree.GetClientRect( &treepos );CRect rect ;GetClientRect( &rect ); if(CxBarAt <= 1) CxBarAt = 1;if(CxBarAt >= len - 1)CxBarAt = len - 1;// 移动tree窗口 m_tree.MoveWindow( 0,0, CxBarAt-SIZEBAR, rect.Height() );// 移动edit窗口 m_edit.MoveWindow(CxBarAt, 0, rect.right-CxBarAt, rect.Height());}void CSpliteDlg::OnLButtonDown(UINT nFlags, CPoint point) {// TODO: Add your message handler code here and/or call defaultm_bButtonDown = TRUE;CRect treepos ;m_tree.GetWindowRect( &treepos );ScreenToClient( &treepos );CRect editpos ;m_edit.GetWindowRect( &editpos );ScreenToClient( &editpos );CRect rect;rect.left = treepos.right;rect.right = editpos.left;rect.top = treepos.top;rect.bottom = treepos.bottom;//CRect rect;//GetClientRect( &rect );if ( rect.PtInRect(point) ){SetCursor(m_SplitCursor);} SetCapture();CDialog::OnLButtonDown(nFlags, point);}void CSpliteDlg::OnLButtonUp(UINT nFlags, CPoint point) {// TODO: Add your message handler code here and/or call defaultm_bButtonDown=FALSE;ReleaseCapture();CDialog::OnLButtonUp(nFlags, point);}void CSpliteDlg::OnSize(UINT nType, int cx, int cy) {CDialog::OnSize(nType, cx, cy);// TODO: Add your message handler code hereif((IsWindow(m_tree.m_hWnd)) && (IsWindow(m_edit.m_hWnd))){// get sizes; width of tree never changed CRect rcTree;m_tree.GetClientRect(&rcTree);CRect rcEdit;m_edit.GetClientRect(&rcEdit);// 移动tree控件rcTree.bottom=cy;m_tree.MoveWindow(&rcTree,TRUE);// 移动edit控件rcEdit.left=rcTree.right+SIZEBAR;rcEdit.right=cx;rcEdit.top=0;rcEdit.bottom=rcTree.bottom;m_edit.MoveWindow(&rcEdit,TRUE);}}
.h 头文件
// spliteDlg.h : header file//#if !defined(AFX_SPLITEDLG_H__5C7DA2C0_E37E_426A_A7D3_E1DC7DFD2766__INCLUDED_)#define AFX_SPLITEDLG_H__5C7DA2C0_E37E_426A_A7D3_E1DC7DFD2766__INCLUDED_#if _MSC_VER > 1000#pragma once#endif // _MSC_VER > 1000/////////////////////////////////////////////////////////////////////////////// CSpliteDlg dialogclass CSpliteDlg : public CDialog{// Constructionpublic:CSpliteDlg(CWnd* pParent = NULL);// standard constructor// Dialog Data//{{AFX_DATA(CSpliteDlg)enum { IDD = IDD_SPLITE_DIALOG };CListCtrlm_edit;CTreeCtrlm_tree;//}}AFX_DATA// ClassWizard generated virtual function overrides//{{AFX_VIRTUAL(CSpliteDlg)protected:virtual void DoDataExchange(CDataExchange* pDX);// DDX/DDV support//}}AFX_VIRTUAL// Implementationprotected:HICON m_hIcon;// Generated message map functions//{{AFX_MSG(CSpliteDlg)virtual BOOL OnInitDialog();afx_msg void OnMouseMove(UINT nFlags, CPoint point);afx_msg void OnLButtonDown(UINT nFlags, CPoint point);afx_msg void OnLButtonUp(UINT nFlags, CPoint point);afx_msg void OnSize(UINT nType, int cx, int cy);//}}AFX_MSGDECLARE_MESSAGE_MAP()private:void ResizeWindows(int CxBarAt, int len );private:HCURSOR m_SplitCursor;BOOL m_bButtonDown;};//{{AFX_INSERT_LOCATION}}// Microsoft Visual C++ will insert additional declarations immediately before the previous line.#endif // !defined(AFX_SPLITEDLG_H__5C7DA2C0_E37E_426A_A7D3_E1DC7DFD2766__INCLUDED_)
- 不用splitter控件 简单实现对mfc对话框的分割的方法
- MFC splitter窗口的实现
- MFC对话框简单实现窗口全透明的方法
- MFC对话框简单实现窗口全透明的方法
- Splitter 控件的使用
- 用Win32实现带分割条(Splitter)的窗口
- MFC对话框控件的属性、方法、消息
- 基于对话框的MFC项目实现窗口分割
- 回调函数中使用MFC类的成员或对话框控件的简单方法。
- 回调函数中使用MFC类的成员或对话框控件的简单方法
- [MFC]设置对话框所有控件字体为同一字体的简单方法
- MFC 分割窗体(Splitter Windows)
- MFC 分割窗体(Splitter Windows)
- MFC 对话框的radio控件
- VC++中对对话框中控件的控制的一种实现方法(适合初学者看)
- MFC访问对话框控件的7种方法
- 利用MFC 对话框访问控件的七种方法
- MFC实现对话框最大化时控件的集体跟踪
- js获取节点 dom操作
- csdn博客
- 22个很棒的jQuery文件上传插件
- 在GCC和Visual Studio中使用hash_map
- 排序---快速排序
- 不用splitter控件 简单实现对mfc对话框的分割的方法
- SwapBuffers.c
- "parameter_hw_name == NULL || parameter_value == NULL" is not equ to "!parameter_hw_name || !parame
- C#周立功CANET
- zoj2417Lowest Bit 水题
- java常用类库续1(日期操作类Date、Calendar、DateFormat、SimpleDateFormat、Math与Random类)
- DAC11:Re-Synthesis for Cost-Efficient Circuit-Level Timing Speculation
- 【转】QT中自定义的信号和槽
- 解剖实体框架(6)---总结