简单生活 发表于 2015-1-16 22:37:10

ASP.NET网页编程之体系托盘气泡提醒和右键菜单的完成

实不相瞒,Java是我见过的执行效率最低的程序设计语言,前不久在CSDN论坛上有个评测,计算9999的阶乘,同样的循环算法,Java的耗时是.NET的5倍。菜单|右键  WTL嵌进类的架构可使全部程序很明晰,体系托盘气泡提醒、高低文菜单处置能够分离自力出来,以下是完成代码,很明晰就不正文了。基础上这两个类很少必要修正,因而我把它们放到了体系包括文件搜刮路径中。
//ContextMenu.h
#pragmaonce
template<classT>
classCContextMenu
{
public:
BOOLCreateContextMenu(UINTID_Menu)
{
T*pT=static_cast<T*>(this);
CMenumenu;
menu.LoadMenu(ID_Menu);
CMenuSubMenu(menu.GetSubMenu(0));
POINTpos;
GetCursorPos(&pos);
SubMenu.TrackPopupMenu(TPM_LEFTALIGN|TPM_RIGHTBUTTON,pos.x,pos.y,pT->m_hWnd);
returnTRUE;
}
};

//ShellIcon.h
#pragmaonce
#defineWM_ICONWM_USER+180
template<classT,classMenuT,intMenuID>
classCShellIcon:publicMenuT
{
private:
NOTIFYICONDATAm_data;
UINTm_msgTaskbarRestart;
CStringm_appName;
public:
CShellIcon()
{
m_appName.LoadString(IDS_APPNAME);
m_msgTaskbarRestart=RegisterWindowMessage(TEXT("TaskbarCreated"));
}
~CShellIcon()
{
Shell_NotifyIcon(NIM_DELETE,&m_data);
}
BOOLCreateShellIcon()
{
T*pT=static_cast<T*>(this);
SecureZeroMemory(&m_data,sizeof(m_data));
m_data.cbSize=sizeof(m_data);
m_data.hIcon=LoadIcon(_Module.get_m_hInst(),MAKEINTRESOURCE(IDR_MAINFRAME));
m_data.hWnd=pT->m_hWnd;
m_data.uID=IDR_MAINFRAME;
m_data.uFlags=NIF_ICON|NIF_MESSAGE|NIF_INFO|NIF_TIP;
m_data.uCallbackMessage=WM_ICON;
m_data.dwInfoFlags=NIIF_USER;
strcpy_s(m_data.szInfoTitle,m_appName);
strcpy_s(m_data.szTip,m_appName);
returnShell_NotifyIcon(NIM_ADD,&m_data);
}
voidModifyToolTips(LPCTSTRinfo)
{
strcpy_s(m_data.szInfo,info);
}
BOOLDispalyToolTips()
{
returnShell_NotifyIcon(NIM_MODIFY,&m_data);
}
BOOLBalloonToolTips(LPCTSTRinfo)
{
ModifyToolTips(LPCTSTRinfo);
returnDispalyToolTips();
}
BEGIN_MSG_MAP(CShellIcon)
MESSAGE_HANDLER(WM_ICON,OnIcon)
MESSAGE_HANDLER(m_msgTaskbarRestart,OnRestart)
MESSAGE_HANDLER(WM_SIZE,OnSize)
CHAIN_MSG_MAP(MenuT)
END_MSG_MAP()
LRESULTOnIcon(UINTuMsg,WPARAMwParam,LPARAMlParam,BOOL&bHandled)
{
T*pT=static_cast<T*>(this);chart;
if(wParam!=IDR_MAINFRAME)return1;
switch(lParam)
{
caseWM_RBUTTONUP:
t=*m_data.szInfo;
*m_data.szInfo=;
Shell_NotifyIcon(NIM_MODIFY,&m_data);
pT->CreateContextMenu(MenuID);
*m_data.szInfo=t;
break;
caseWM_LBUTTONUP:
pT->ShowWindow(SW_SHOW);
OpenIcon(pT->m_hWnd);
break;
//往失落上面的正文可使鼠标悬停在图标上时呈现气泡提醒,团体不太喜好
caseWM_MOUSEMOVE:
//DispalyToolTips();break;
default:
;
}
return0;
}
//处置Explorer外壳溃散前任务栏重修,你会发明良多程序都没处置,了局就是Explorer一溃散
//图标就找不到了,假如最小化就任务栏更惨,还得用义务办理器封闭,这个函数我没时机测试,但愿有感化
LRESULTOnRestart(UINTuMsg,WPARAMwParam,LPARAMlParam,BOOL&bHandled)
{
T*pT=static_cast<T*>(this);
SecureZeroMemory(&m_data,sizeof(m_data));
m_data.cbSize=sizeof(m_data);
m_data.hWnd=pT->m_hWnd;
m_data.uID=IDR_MAINFRAME;
Shell_NotifyIcon(NIM_DELETE,&m_data);
CreateShellIcon();
return0;
}
//最小化到体系托盘
LRESULTOnSize(UINT/*uMsg*/,WPARAM/*wParam*/,LPARAM/*lParam*/,BOOL&/*bHandled*/)
{
T*pT=static_cast<T*>(this);
if(pT->IsIconic())pT->ShowWindow(SW_HIDE);
return0;
}
};

//MyIconMenu.h
#pragmaonce
#include"stdafx.h"
#include<ContextMenu.h>
template<classT>
classCMyIconMenu:publicCContextMenu<T>
{
public:
BEGIN_MSG_MAP(CContextMenu)
COMMAND_ID_HANDLER(ID_RESUME,OnResume)
COMMAND_ID_HANDLER(ID_QUIT,OnQuit)
END_MSG_MAP()
LRESULTOnResume(WORD/*wNotifyCode*/,WORDwID,HWND/*hWndCtl*/,BOOL&/*bHandled*/)
{
T*pT=static_cast<T*>(this);
pT->ShowWindow(SW_SHOW);
OpenIcon(pT->m_hWnd);
return0;
}

LRESULTOnQuit(WORD/*wNotifyCode*/,WORDwID,HWND/*hWndCtl*/,BOOL&/*bHandled*/)
{
PostQuitMessage(0);
return0;
}
};
  CContextMenu的利用
  假如你的窗口必要高低文菜单,只必要从CContextMenu派生一个类,比方:template<classT>classCMyContextMenu:publicCContextMenu<T>
  然后完成动静映照,比方CMyIconMenu所做的。在你的窗口类(假定为CMyWindowClass)的承继列内外面增加publicCMyContextMenu<CMyWindowClass>,在动静映照表中增加CHAIN_MSG_MAP(CMyContextMenu<CMyWindowClass>)
  接上去只需在必要显现高低文菜单的中央,挪用CreatContextMenu(UINTID_Menu)就能够了。
  CShellIcon的利用
  起首要把stdafx.h中IE的版本改成5大概6,比方:
#define_WIN32_IE0x0600
  然后到场CString撑持,大概每一个项目都几近用到CString,人人无妨间接修正模板文件,让导游间接把CString加出来算了。
  从CContextMenu派生一个类来完成菜单映照,比方CMyIconMenu所作的。
  以下用形式对话框来演示怎样给其到场托盘功效,蓝色的部分为增加的部分。
#pragmaonce
#include"MyIconMenu.h"
#include<ShellIcon.h>
classCMainDlg:publicCDialogImpl<CMainDlg>,publicCShellIcon<CMainDlg,CMyIconMenu<CMainDlg>,IDR_ICONMENU>
{
public:
enum{IDD=IDD_MAINDLG};
typedefCShellIcon<CMainDlg,CMyIconMenu<CMainDlg>,IDR_ICONMENU>CMyShellIcon;
BEGIN_MSG_MAP(CMainDlg)
MESSAGE_HANDLER(WM_INITDIALOG,OnInitDialog)
COMMAND_ID_HANDLER(ID_APP_ABOUT,OnAppAbout)
COMMAND_ID_HANDLER(IDOK,OnOK)
COMMAND_ID_HANDLER(IDCANCEL,OnCancel)
CHAIN_MSG_MAP(CMyShellIcon)
END_MSG_MAP()
LRESULTOnInitDialog(UINT/*uMsg*/,WPARAM/*wParam*/,LPARAM/*lParam*/,BOOL&/*bHandled*/)
{
//centerthedialogonthescreen
CenterWindow();
//seticons
HICONhIcon=(HICON)::LoadImage(_Module.GetResourceInstance(),MAKEINTRESOURCE(IDR_MAINFRAME),
IMAGE_ICON,::GetSystemMetrics(SM_CXICON),::GetSystemMetrics(SM_CYICON),LR_DEFAULTCOLOR);
SetIcon(hIcon,TRUE);
HICONhIconSmall=(HICON)::LoadImage(_Module.GetResourceInstance(),MAKEINTRESOURCE(IDR_MAINFRAME),
IMAGE_ICON,::GetSystemMetrics(SM_CXSMICON),::GetSystemMetrics(SM_CYSMICON),LR_DEFAULTCOLOR);
SetIcon(hIconSmall,FALSE);
CreateShellIcon();
returnTRUE;
}
……………………
};
  在想弹出气泡的时分挪用BOOLBalloonToolTips(LPCTSTRinfo)
我有个同学,他是搞Java的,他给我说“Java不是效率低,而是速度慢。”,我不是搞Java的,我实在想不透这句话的含义,难道执行速度不就是效率低吗?难道执行速度慢还成效率高了?

若天明 发表于 2015-1-19 18:53:25

以上是语言本身的弱点,在功能方面ASP同样存在问题,第一是功能太弱,一些底层操作只能通过组件来完成,在这点上是远远比不上PHP/JSP,其次就是缺乏完善的纠错/调试功能,这点上ASP/PHP/JSP差不多。

愤怒的大鸟 发表于 2015-1-26 22:43:26

ASP(ActiveServerPages)是Microsfot公司1996年11月推出的WEB应用程序开发技术,它既不是一种程序语言,也不是一种开发工具,而是一种技术框架,不须使用微软的产品就能编写它的代码。

山那边是海 发表于 2015-2-4 21:21:57

ASP.NET:ASP.net是Microsoft.net的一部分,作为战略产品,不仅仅是ActiveServerPage(ASP)的下一个版本;它还提供了一个统一的Web开发模型,其中包括开发人员生成企业级Web应用程序所需的各种服务。ASP.NET的语法在很大程度上与ASP兼容,同时它还提供一种新的编程模型和结构,可生成伸缩性和稳定性更好的应用程序,并提供更好的安全保护。

飘飘悠悠 发表于 2015-2-10 13:18:41

Asp.net脚本的出现,为ASP空间带来了更高的稳定性,同时也为程序员建站提供更高环境!

小魔女 发表于 2015-3-1 10:52:39

ASP.NET:ASP.net是Microsoft.net的一部分,作为战略产品,不仅仅是ActiveServerPage(ASP)的下一个版本;它还提供了一个统一的Web开发模型,其中包括开发人员生成企业级Web应用程序所需的各种服务。ASP.NET的语法在很大程度上与ASP兼容,同时它还提供一种新的编程模型和结构,可生成伸缩性和稳定性更好的应用程序,并提供更好的安全保护。

活着的死人 发表于 2015-3-10 16:14:09

JSP/Servlet虽然在国内目前的应用并不广泛,但是其前途不可限量。

蒙在股里 发表于 2015-3-17 08:44:09

主流网站开发语言之CGI:CGI就是公共网关接口(CommonGatewayInterface)的缩写。它是最早被用来建立动态网站的后台技术。这种技术可以使用各种语言来编写后台程序,例如C,C++,Java,Pascal等。

兰色精灵 发表于 2015-3-24 04:10:19

代码的可重用性差:由于是面向结构的编程方式,并且混合html,所以可能页面原型修改一点,整个程序都需要修改,更别提代码重用了。
页: [1]
查看完整版本: ASP.NET网页编程之体系托盘气泡提醒和右键菜单的完成