MFC开发之制作一个登陆后的页面

效果: 
MFC开发之制作一个登陆后的页面_第1张图片 X

一个简单的好友界面就显示出来了。简单介绍一下,为了简单美化界面,将对话框的边框去掉了。所以在客户区要实现以下功能:单击鼠标可以移动窗口,添加最小,退出键,当鼠标焦点在某个控件的时候显示提示信息,在下半段添加tree control控件,显示好友信息,当鼠标双击时,显示聊天界面: MFC开发之制作一个登陆后的页面_第2张图片
该界面只是简单的实现了,,有时间进行美化,下面来说说具体的实现步骤:
1.实现最小化,退出功能
为了使界面美观,在客户区的右上角添加了2个静态文本充当按钮,将空间的notify属性设置为true,接受消息。将其的文本设置为'X'充当退出按钮,最小化类似。
在OnliitDialog()函数中添加如下代码:
EnableToolTips(TRUE);
m_ttc.Create(this);
m_ttc.Activate(TRUE);
CWnd* pw = GetDlgItem(IDC_STATIC3);
m_ttc.AddTool(pw, _T('退出'));
pw = GetDlgItem(IDC_STATIC4);
m_ttc.AddTool(pw, _T('最小化'));
实现PreTranslateMessage虚函数,添加如下代码:
m_ttc.RelayEvent(pMsg);//m_ttc为在头文件声明的CToolTipCtrl m_ttc;
这样当鼠标的焦点移动到该静态文本时,就会提示这是 退出 按钮
双击静态文本控件,进入响应单击函数,加入如下代码: 
void DlgChat::OnStnClickedStatic3()
{
OnClose();
}
其中的OnClose函数
void DlgChat::OnClose()
{
GetParent()->DestroyWindow();//销毁父对话框
CDialogEx::OnClose();
}
最小化类似 最小化的函数:
theApp.GetMainWnd()->ShowWindow(SW_MINIMIZE);//最小化窗口
2.实现昵称
响应WM_Paint消息 在OnPaint函数添加如下代码:
GetParent()->ShowWindow(SW_HIDE); //隐藏父对话框
CStatic*pStatic = (CStatic *)GetDlgItem(IDC_STATIC6);
CString str;
CFont*font, newFont;
//MessageBox(L'hello');
font = pStatic->GetFont();//获取CFont对象
LOGFONT lf;
font->GetLogFont(&lf);//获取LOGFONT结构体
SetCursor(LoadCursor(NULL, IDC_HAND));
newFont.CreateFont(-30, // nHeight
-15, // nWidth
0, // nEscapement
0, // n Orientation
FW_NORMAL, // nWeight
FALSE, // 斜体
FALSE, // 下划线
0, // cStrikeOut
ANSI_CHARSET, // nCharSet
OUT_DEFAULT_PRECIS, // nOutPrecision
CLIP_DEFAULT_PRECIS, // nClipPrecision
DEFAULT_QUALITY, // nQuality
DEFAULT_PITCH | FF_SWISS, // nPitchAndFamily
_T('楷体')); //设置昵称的字体
pStatic->SetFont(&newFont);
pStatic->GetWindowText(str);
pStatic->SetWindowText(str);//将昵称显示到对话框
SetDlgItemText(IDC_EDIT1, L'编辑你的个性签名!');
说明一下,,这里放在OnPaint函数不放在OnInitDialog函数是因为每次如果最小化,然后再恢复窗口,如果放在OnInitDialog函数里面,则昵称就无法显示,只显示一次
3.tree control控件的设置
在工具箱添加tree control控件到对话框 在OnInitDialog函数里面添加如下代码:
HICON h Icon[4]; // 图标句柄数组
hIcon[0] = theApp.LoadIcon(IDI_ICON1);//添加的icon图标资源ID
hIcon[1] = theApp.LoadIcon(IDI_ICON2);
hIcon[2] = theApp.LoadIcon(IDI_ICON3);
hIcon[3] = theApp.LoadIcon(IDI_ICON4);
m_imageList.Create(32, 32, ILC_COLOR32, 4, 4);
for (int i = 0; i<4; i++)
{
m_imageList.Add(hIcon[i]);
}
m_webTree.SetImageList(&m_imageList, TVSIL_NORMAL);
HTREEITEM hroot = m_webTree.InsertItem(L'我的好友', 0, 0, TVI_ROOT);//添加一级结点
m_webTree.SetItemData(hroot, 1);//设置节点的编号
HTREEITEM h1 = m_webTree.InsertItem(L'移动开发', 2, 2, hroot);//添加二级结点
m_webTree.SetItemData(h1, 2);//设置节点的图标
HTREEITEM h2 = m_webTree.InsertItem(L'WEB前端', 1, 1, hroot);//添加二级结点
m_webTree.SetItemData(h2, 3);
HTREEITEM h3 = m_webTree.InsertItem(L'数据库', 3, 3, hroot);//添加二级结点
m_webTree.SetItemData(h3, 4);
//第2个参数是item在添加好后的图标
//第3个参数为ite m在被选中后的图标
在该对话框的资源视图,选中tree control控件 查看它的属性--->控件事件 添加 NM_DBLILK事件 在其中添加响应双击事件处理函数
void DlgChat::OnNMDblclkTree2(NMHDR *pNMHDR, LRESULT *pResult)
{
// TODO: 在此添加控件通知处理程序代码
CTreeCtrl *ctreectrl = (CTreeCtrl *)GetDlgItem(IDC_TREE2);
//获取当前鼠标点击消息的坐标点
CPoint pt = GetCurrentMessage()->pt;
//将鼠标的屏幕坐标,转换成树形控件的客户区坐标
ctreectrl->ScreenToClient(&pt);
UINT uFlags = 0;
HTREEITEM hItem = ctreectrl->HitTest(pt, &uFlags);//然后做点击测试
if ((hItem != NULL) && (TVHT_ONITEM & uFlags))//如果点击的位置是在节点位置上
{
ctreectrl->SelectItem(hItem);
//获取开始我们设置的数据,注意这就是我为什么开始要每个节点设置不同的数据的原因。
//然后通过字符串比较来判断点击了哪个节点
int nDat = ctreectrl->GetItemData(hItem); //然后根据不同的节点,你完成不同的动作即可
if (nDat == 2 || nDat == 3 || nDat == 4){
ChatWin *test = new ChatWin;
test->Create(IDD_DIALOG2, this);
test->ShowWindow(SW_SHOW);
this->ShowWind ow(SW_HIDE);
}
*pResult = 0;
}
}
到此为止,一个简单的登录界面就完成了

你可能感兴趣的:(MFC开发之制作一个登陆后的页面)