1、CWnd :: FromHandle
CWnd在给定窗口句柄时,返回指向对象的指针。如果CWnd对象未附加到句柄,CWnd则会创建并附加临时对象。
static CWnd * PASCAL FromHandle(HWND hWnd);
2、CWnd::Attach
当我们使用MFC创建一个窗口时,是分两步进行的:
第一步,new一个CWnd对象,这一步是创建C++对象,但是其中的HWND还是非法的,因为对应的Windows对象还没有被创建出来;
第二步,调用CWnd的成员函数Create创建真正的Windows对象,同时,把先前创建的MFC的CWnd对象的HWND成员指向该窗口,这样才算创建完毕一个窗口。
现在你已经有了一个有效窗口句柄(指向(并标识)了一个具体的Windows window),那么你想把这个窗口和一个CWnd对象关联起来怎么办?很简单,用Attach:其实就是让一个C++对象——CWnd对象的HWND成员等于这个窗口句柄。这就是Attach主要完成的任务。
HWND hWnd = ::GetDlgItem(m_hWnd, IDC_EDIT1);//得到IDC_EDIT1的句柄
m_edit.Attach(hWnd);//将这个句柄附加到m_edit的CWnd对象上。
3、CWnd::Detach
分离 CWnd 对象的一个Windows句柄并返回处理。经常与Attach配合使用,Attach之后如果不使用Detach,程序结束时会报错。
void CTestCWndDlg::OnDestroy()
{
CDialog::OnDestroy();
m_edit.Detach();
}
4、CWnd :: GetStyle、CWnd :: GetExStyle、CWnd::ModifyStyle、CWnd::ModifyExStyle
得到当前窗口的样式、扩展样式。修改当前窗口的样式、扩展样式。
DWORD GetStyle()const;
BOOL ModifyStyle(
DWORD dwRemove,//指定在样式修改期间要删除的窗口样式。
DWORD dwAdd,//指定在样式修改期间添加的窗口样式。
UINT nFlags = 0
);
5、CListCtrl的创建与添加行与列
CListCtrl::Create
virtual BOOL Create(
DWORD dwStyle,//指定列表控件的样式。
const RECT& rect,//指定列表控件的大小和位置。
CWnd* pParentWnd,//指定列表控件的父窗口
UINT nID //指定列表控件的ID.
);
CListCtrl::CreateEx
virtual BOOL CreateEx(
DWORD dwExStyle,//指定创建的控件的扩展样式。
DWORD dwStyle,
const RECT& rect,
CWnd* pParentWnd,
UINT nID
);
CListCtrl::InsertColumn
插入新的一列
int InsertColumn(
int nCol,
const LVCOLUMN* pColumn
);
int InsertColumn(
int nCol,//列号
LPCTSTR lpszColumnHeading,//标题
int nFormat = LVCFMT_LEFT,//标题显示形式
int nWidth = -1,//列的宽度
int nSubItem = -1
);
CListCtrl::InsertItem
插入一行到视图中
int InsertItem(const LVITEM* pItem);
int InsertItem(
int nItem, //要插入项的索引。
LPCTSTR lpszItem);//包含项的标签的字符串的地址
int InsertItem(
int nItem,
LPCTSTR lpszItem,
int nImage);//项的图像的索引
int InsertItem(
UINT nMask,
int nItem,
LPCTSTR lpszItem,
UINT nState,
UINT nStateMask,
int nImage,
LPARAM lParam);
CListCtrl::SetItemText
更改列表视图项或子项的文本。
BOOL SetItemText(
int nItem, //要设置其文本的项的索引。行(0,1,2,)
int nSubItem, //要设置的项目标签子项。列(1,2,3,)
LPCTSTR lpszText);//包含新的项文本的字符串指针。
例如:
if(!m_list)
{
m_list.CreateEx(WS_EX_CLIENTEDGE,WS_VISIBLE|WS_CHILD|LVS_REPORT,CRect(10,80,300,300),this,1234);
m_list.InsertColumn(0,_T("name"),LVCFMT_CENTER,100);//文字显示居中
m_list.InsertColumn(1,_T("age"),LVCFMT_CENTER,100);
m_list.InsertColumn(2,_T("sex"),LVCFMT_CENTER,100);
m_list.InsertItem (0,_T("彭涛"));//插入新的一行,设置第一个字段的值,也就是第一列
m_list.SetItemText(0,1,_T("18"));//其他字段必须由SetItemText进行设置
m_list.SetItemText(0,2,_T("男"));//其他字段必须由SetItemText进行设置
m_list.InsertItem (1,_T("谭赟"));
m_list.SetItemText(1,1,_T("18"));//其他字段必须由SetItemText进行设置
m_list.SetItemText(1,2,_T("女"));//其他字段必须由SetItemText进行设置
m_list.InsertItem (2,_T("张三"));
m_list.SetItemText(2,1,_T("18"));//其他字段必须由SetItemText进行设置
m_list.SetItemText(2,2,_T("男"));//其他字段必须由SetItemText进行设置
}
![](https://i-blog.csdnimg.cn/blog_migrate/1f80f5a48e7304ac358887be8b37acbc.png)