Chinaunix首页 | 论坛 | 博客
  • 博客访问: 110047
  • 博文数量: 52
  • 博客积分: 2050
  • 博客等级: 大尉
  • 技术积分: 451
  • 用 户 组: 普通用户
  • 注册时间: 2009-06-06 15:52
文章分类

全部博文(52)

文章存档

2011年(1)

2010年(2)

2009年(49)

我的朋友

分类: 嵌入式

2009-07-30 21:50:49

wince下如何做程序的开机自动启动?这个问题在vc下是个容易的问题,但是ce下,要尝试一下。

实现的功能如下 :开机自动启动;收到托盘区;托盘区双击程序托盘,程序主界面出现;托盘图标的右键菜单;

主体思想:1 开机自动启动。修改注册表,具体键值忘了,改天加上。

2 收到托盘区。这个分为两种情况,一种是点击最小化收到托盘区,一种是开机自动收到托盘区。其中收到托盘区的方法都一样。

NOTIFYICONDATA nid; 
 nid.cbSize=(DWORD)sizeof(NOTIFYICONDATA); 
 nid.hWnd=this->m_hWnd; 
 nid.uID=IDR_MAINFRAME; 
 nid.uFlags=NIF_ICON|NIF_MESSAGE|NIF_TIP ; 
 nid.uCallbackMessage=WM_SHOWTASK;//自定义的消息名称 
 nid.hIcon=LoadIcon(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDR_MAINFRAME)); 
 CString szToolTip=_T("VMAX Connection Manager"); 
 wcscpy(nid.szTip,szToolTip);  
 if(Shell_NotifyIcon(NIM_ADD,&nid) !=0 ) //在托盘区添加图标 
  ShowWindow(SW_HIDE); //隐藏主窗口 
利用这个Shell_NotifyIcon函数。nid可以设置托盘的一些信息,比如图标是nid.uID,回调消息是nid.uCallbackMessage,这个可以设置回调的消息,也就是对托盘图标操作之后的响应。这个操作可以使双击,可以使右键。所以可以在这里处理,托盘右键菜单的问题。

3 ,设置自定义消息的响应函数,在函数中区分对图标的操作类型,分别响应。 
 

下面是onShowMain函数,主要作用是弹出主界面。OnShowTast函数的作用是对图标操作消息的响应,这个映射关系要自己去定义,它的主要功能是对右键弹出相应的操作菜单,其中菜单又可以自定义响应消息和响应函数。双击弹出主界面,调用onShowMain函数。当然你也可以再这里添加其它的操作也可以。

void CTestCMDlg::onShowMain()
{
    
    this->ShowWindow(SW_SHOW);
            OnDeleteIcon();
    ::BringWindowToTop(this->GetSafeHwnd());
    
}

LRESULT CTestCMDlg::onShowTask(WPARAM wParam,LPARAM lParam)
{
    if(wParam!=IDR_MAINFRAME)
        return 1;
    switch(lParam)
    {
    case WM_LBUTTONDBLCLK:
        {
            this->ShowWindow(SW_SHOW);
            ::BringWindowToTop(this->GetSafeHwnd());
            OnDeleteIcon();
        }
        break;
    case WM_RBUTTONUP://右键起来时弹出快捷菜单

        {
            LPPOINT lpoint=new tagPOINT;
            ::GetCursorPos(lpoint);//得到鼠标位置

            CMenu menu;
            menu.CreatePopupMenu();//声明一个弹出式菜单

            
            menu.AppendMenu(MF_STRING,SHOWMAIN,_T("Show CM"));
            menu.AppendMenu(MF_STRING,WM_DESTROY,_T("Exit"));
            
            //确定弹出式菜单的位置

            menu.TrackPopupMenu(TPM_LEFTALIGN,lpoint->x,lpoint->y,this);
            //资源回收

            HMENU hmenu=menu.Detach();
            menu.DestroyMenu();
            delete lpoint;
        }
        break;
    }
    return 0;
}

阅读(2260) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~