1.TAB CONTROL 主页面和分页面的实现,和信息交互:
1.1 显示多窗口代码:my_tab(是TAB CONTROL的实体)在OnInitDialog中写入 my_tab.InsertItem(0,_T("数据库登陆"));//要几个写几个,叫什么名字后面写什么
1.2 首先创建子窗口资源(DIALOG下):Style:CHILD ,Border:None.为每个创建的子窗口添加类进行后期的控制。今后关于该子窗口上的所有按钮将由窗口类控制
1.3子窗口放入主窗口中:BackUp(子窗口类名) my_page1;//写在主窗口头文件中。 然后源文件写入 my_page1.Create(IDD_DIALOG2,&my_tab);//如此便创建了连接
my_page2.Create(IDD_DIALOG3,&my_tab).
1.4调整子窗口在主窗口中位置: CRect r; my_tab.GetClentRect(&r);//TAB子窗口大小委托给R r.top+=20; r.botton-=30;r.left+=1;r.right-=3;
my_page1.movewindow(&r); my_page2.movewindow(&r);// 这里就已经将子窗口移入TAB设置的空间中
初始化显示:my_page1.ShowWind(True); my_page2.ShowWind(False);
1.5 TAB切换事件中写入:switch(my_tab.GetCurSel()) { case:0 。。。my_page1.ShowWind(True); my_page2.ShowWind(False);。}//my_tab.GetCurSel()返回前面的 0,,1.
1.6关于信息交互: 子窗口上的信息要读取给父窗口,my_page1.GetPath(); my_page1是主窗口子窗口类实体,所以通过调用它的方法可以获取子窗口信息
如果是子窗口要获取父窗口信息 this->GetParent()->GetParent()->GetDlgItem(IDD_EDIT1)->GetWindText(port);//如此port是接收IDD_EDIT1数据的变量
//===================================================================================================================================
2.关于图标的更改,和托盘化。
2.1如何加图标:资源ICON里面把要导入的图标加入(注意图标有一定的要求,一般很小),注意icon的ID。
2.2如何设置托盘菜单:相应的在menu里面插入资源,写上字。
2.3最小化托盘和删除托盘...: 函数名 void ToTray(); void DeleteTray();
afx_msg LRESULT OnShowTask(WPARAM wParam, LPARAM lParam);//响应鼠标对托盘图标左键点击,右键点击等事件的处理函数
afx_msg void OnShow();//自定义消息连接(将消息跟窗口函数挂钩)
afx_msg void OnClose();
//============================================
BEGIN_MESSAGE_MAP(CDBToolDlg,CDialog)//系统消息函数连接
。。。。。。。
ON_MESSAGE(WM_SHOWTASK, &CDBToolDlg::OnShowTask)
ON_COMMAND(ID_SHOW, &CDBToolDlg::OnShow)//ID_SHOW是menu打开主界面的字的ID
ON_COMMAND(ID_CLOSE, &CDBToolDlg::OnClose)
END_MESSAGE_MAP()
//========================================
void CDBToolDlg::ToTray()//在托盘区显示图标
{
NOTIFYICONDATA nid;
nid.cbSize=(DWORD)sizeof(NOTIFYICONDATA);
nid.hWnd=this->m_hWnd;
nid.uID=IDI_ICON3;//次ID就是软件图形的id
nid.uFlags=NIF_ICON | NIF_MESSAGE | NIF_TIP;
nid.uCallbackMessage=WM_SHOWTASK;// #define WM_SHOWTASK (WM_USER+1)//自定义消息名称
nid.hIcon=LoadIcon (AfxGetInstanceHandle(),MAKEINTRESOURCE(IDI_ICON3));
strcpy(nid.szTip,"数据库工具");//信息显示条
shell_NotifyIcon(NIM_ADD, &nid);// 在托盘区添加图标
ShowWindow(SW_HIDE);//隐藏主窗口
}
void CDBToolDlg::DeleteTray()//托盘区图标撤去
{
NOTIFYICONDATA nid;
nid.cbSize=(DWORD)sizeof(NOTIFYICONDATA);
nid.hWnd=this->m_hWnd;
nid.uID=IDI_ICON3;//次ID就是软件图形的id
nid.uFlags=NIF_ICON | NIF_MESSAGE | NIF_TIP;
nid.uCallbackMessage=WM_SHOWTASK;// #define WM_SHOWTASK (WM_USER+1)//自定义消息名称
nid.hIcon=LoadIcon (AfxGetInstanceHandle(),MAKEINTRESOURCE(IDI_ICON3));
strcpy(nid.szTip,"程序名称");//信息显示条
shell_NotifyIcon(NIM_DELETE, &nid);// 在托盘区删除图标//其中只有shell命令换了NIM_DELETE vs NIM_ADD
}
//=========================================================
void CDBToolDlg::OnShow()
{
this->ShowWind(SW_SHOW);
DeleteTray();//主界面显示后,退去托盘图标
}
void CDBToolDlg::OnClose()
{
DeleteTray();//点击托盘菜单显示的推出按钮后,推出程序,删掉图标
exit(1);
}
//=====================================================================
LRESULT CDBToolDlg::OnShowTask(WPARAM wParam, LPARAM lParam)
{
if(wParam!=IDI_ICON3)
return 1;//如果鼠标位置不是移动在ID为IDI_ICON3的ICON上,则程序返回
switch(lParam)//如果移动到该图标,且鼠标做了iParam的信息则根据信息选择函数功能执行
{
case WM_RBUTTONUP://右键起来时的消息,做出如下
{
CMenu menu;
Cpoint point;
::GetCursorPos(& point);//将显示的位置委托给point变量来操作
menu.LoadMenu(IDR_MENU1);//显示我们先前创建的Menu资源
menu.GetSubMenu(0)->TrackPopupMenu(TPM_CENTERALIGN | TPM_LEFTBUTTON | TPM_RIGHTBUTTON,point.x,point.y,this);
}
break;
case WM_LBUTTONDBLCLK://双击左键
{
OnShow();//显示主界面,并撤掉图标
}
default::
break;
}
return 0;
}
//====================================修改关掉界面的操作============
void CDBToolDlg::OnSysCommand(UINT nID,LPARAM lParam)//修改系统函数
{
if(nID== SC_MINIMIZE )//窗口上最小化图标点击后,就托盘化(最小化)
ToTray();
else if(nID== SC_CLOSE)//窗口上关闭图标点击后,就关闭
OnClose();
else
CDialog::::OnSysCommand(nID,lParam);
}