今天学习的总结。
文字输入:
增加一个private的变量m_str在VIEW类里面,然后增加WM_CHAR消息。
m_str+=(char)nChar;
invalidate(); //掉用OnDarw
在OnDarw里面。
pDC->Textout(20,20,m_str);
任务栏:
在OnCreate中增加代码。
NOTIFYICONDATA tnd;
tnd.cdSize=sizeof(NOTIFYICONDATA);
tnd.hWnd=this->m_hWnd;
tnd.uID=IDR_MAINFRAME;
tnd.uFlage=NIF_MESSAGE|NIR_ICON|NIF_TIP;
tnd.uCallbackMessage=WM_LINBEN;
tnd.hIcon=LoadIcon(AfxGetInstanceHandle());
MAKEINTRESOURCE(IDR_MAINFRAME);
strcpy(tnd.szTip,"名字");
Shell_NotifyIcon(NIM_ADD,&tnd);
然后在resource.h 定义消息
#define WM_LIBEN WM_USER+1
再该窗口的头文件中声明消息映射函数的原型
afx_msg void OnLiben(WPARAM wParam,LPARAM lParam);
并在CPP文件中的消息映射中加入
ON_MESSAGE(WM_LIBEN,OnLiben)
在hWnd窗口中响应自定义函数
UINT uID;
UINT uMouseMsg;
POINT pt;
uID=(UINT)wParam;
uMouseMsg=(UINT)lParam;
if(uMouseMsg==WM_RBUTTONDOWN)
{
switch(nID)
{
case IDR_MAINFRAME:
GetCursorPos(&pt);
CMenu *m_pMenu;
CMenu menu;
menu.LoadMenu(IDR_MENU1);
m_pMenu=menu.GetSubMenu(0);
m_pMenu->TrackPopupMenu(TPM_CENTERALIGN + TPM_LEFTBUTTON,pt.x-30,pt.y+5,this,NULL);
可以自己为IDR_MENU1加下拉菜单写功能;
}
return;
}
然后增加删除图标的。在mainframe里面增加函数OnAppExit()
CMainFrame::OnAppExit()
{
NOTIFYICONDATA tnid;
tnid.cbSize=sizeof(NOTIFYICONDATA);
tnid.hWnd=this->m_hWnd;
tnid.uID=IDR_MAINFRAME;
Shell_NotifyIcon(NIM_DELETE,&tnid);
AfxPostQuitMessage(0);
}
记得为MAINFRAME加WM_DESTROY并在下面调用
OnAppExit();
这样点关闭的时候也将任务栏上面图标删了
最前:
我增加了两个菜单并写最前和恢复
void CMainFrame::OnMenuitmeTopmost()
{
//最前
::SetWindowPos(AfxGetMainWnd()->m_hWnd,HWND_TOPMOST,-1,-1,-1,-1,SWP_NOMOVE|SWP_NOSIZE);
}
void CMainFrame::OnMenuitemRecover()
{
//恢复
::SetWindowPos(AfxGetMainWnd()->m_hWnd,HWND_NOTOPMOST,-1,-1,-1,-1,SWP_NOMOVE|SWP_NOSIZE);
}