4946|11

84

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

evc托盘编程 [复制链接]

使用evc4.0编写一个系统托盘,就是我的程序起来之后,不显示对话框,自动出现一个图标到右下角,通过双机图标,可以弹出对话框。
右键单击右下角图标,可以弹出一个菜单。
不知道如何实现这些功能,请兄弟姐妹们帮个忙!

最新回复

你的问题如何解决的?  详情 回复 发表于 2009-10-19 08:54
点赞 关注

回复
举报

76

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
这个跟 PC 机编程一样,你网上找一个例子看看就行。
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
对,找个vc的例子来看
vc下托盘编程的例子很多,

evc下类似,
 
 
 

回复

82

帖子

0

TA的资源

一粒金砂(初级)

4
 
楼上的兄弟们,我在vc下面写过一个托盘的,把代码拷贝到evc下面,提示有些API,wince不支持,还有就是有些消息类型wince下面不支持,所以,蛮头大的。
楼上兄弟们,如果有代码,请不吝赐教!
 
 
 

回复

79

帖子

0

TA的资源

一粒金砂(初级)

5
 
你装一个POCKET PC 2003的SDK,然后再查看根目录\Windows CE Tools\wce420\POCKET PC 2003\Samples\Win32\Trayapp这个例子就研究一下。
 
 
 

回复

66

帖子

0

TA的资源

一粒金砂(初级)

6
 
NOTIFYICONDATA m_nid;
-------------------------------------------------------------------------------
         m_nid.cbSize  =   sizeof(NOTIFYICONDATA);      
        m_nid.hIcon  =  m_hIcon;      
        m_nid.hWnd  =   this->m_hWnd;      
        m_nid.uFlags =  NIF_MESSAGE|NIF_ICON|NIF_TIP;      
        m_nid.uCallbackMessage       =       WM_MY_NOTIFY;      
        m_nid.uID =   IDR_MAINFRAME;      
    lstrcpy(m_nid.szTip,TEXT("气泡提示"));  
        Shell_NotifyIcon(NIM_ADD,&m_nid);
-------------------------------------------------------------------------------
#define WM_MY_NOTIFY WM_USER+100
-------------------------------------------------------------------------------
ON_MESSAGE(WM_MY_NOTIFY,OnCLickHereMessage)

afx_msg void   CReadGpsDlg::OnCLickHereMessage(WPARAM   wParam,LPARAM   lParam)
{
        UINT   uID;
        INT   uMouseMsg;
        uID=(UINT)wParam;
        uMouseMsg=(UINT)lParam;
        if(uMouseMsg   ==   WM_RBUTTONDOWN   ||   uMouseMsg   ==   WM_LBUTTONDOWN)
        {
                switch(uID)
                {
                case   IDR_MAINFRAME:
                        {
                                /*GetCursorPos(&pt);
                                ShowWindow(SW_SHOW);
                                SetForegroundWindow();*/
                                 CMenu  menu,*pmenu;   
                                 if(menu.LoadMenu(IDR_MENU1))
                                 {
                                         pmenu=menu.GetSubMenu(0);     
                                         if(pmenu!=NULL)
                                         {
                                                 CPoint  pt;   
                                                 GetCursorPos(&pt);
                                                 ClientToScreen(&pt);
                                                     //位置显示有点问题,我也没解决!
                                                 pmenu->TrackPopupMenu(TPM_LEFTALIGN,pt.x,pt.y,this);
                                        }
                                 }
                        }
                        break;
                default:
                        break;
                }
        }
        return;
}
 
 
 

回复

85

帖子

0

TA的资源

一粒金砂(初级)

7
 
多谢楼上的兄弟们,现在我是按照5楼的代码写的程序,现在遇到了一个新的问题。
我的exe是个基于Dialog的MFC程序,我在app中是将对话框对象new出来,然后调用dialog的create函数生成dialog的。
我在vc6下面这样使用的时候,dialog对象生成后,会进入dialog的create函数执行,然后再执行oninitiatedialog函数执行。
但是在evc下面这样使用,dialog的create函数进不去,这是怎么回事啊,请教各位兄弟。

另外:我在app中create了dialog对象后,并没有让dialog显示出来,但是在wince中执行的时候,dialog还是显示了出来。
不知道是什么原因,请各位兄弟指点下。
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

8
 
学习
 
 
 

回复

74

帖子

0

TA的资源

一粒金砂(初级)

9
 

这里有一个声音托盘的程序,类比一下,希望有帮助

程序很简单,主要包括几个方面:

1、  自定义一个消息用来处理系统托盘的操作

2、  初始化NOTIFYICONDATA结构

3、  调用API函数Shell_NotifyIcon

4、  系统托盘消息处理



5、 将编译生成的SoundSystemTray.exe拷贝至Wince 工程目录下

6、 将在SoundSystemTray.exe 加到NK中

platform.bib中添加

SoundSystemTray.exe $(_FLATRELEASEDIR)\SoundSystemTray.exe  NK S

7、 设置开机自动运行SoundSystemTray.exe

platform.reg中添加

[HKEY_LOCAL_MACHINE\Init]

"Launch80"="SoundSystemTray.exe"

"Depend80"=hex:1e,00















下面贴出所有代码:

// VIA_Volume.cpp : Defines the entry point for the application.

//



#include "stdafx.h"

#include "resource.h"

#include



#define  VOLUME_DEBUG 1



#define  WM_SHELL_NOTIFYICON (WM_USER +11) //自定义消息



BOOL CALLBACK DlgProc(HWND hwnd,UINT uMsg,WPARAM wParam,LPARAM lParam);

LRESULT OnShowIcon(HWND hwnd,WPARAM wParam,LPARAM lParam);



DWORD CurrentVolume;

BOOL bIsMute;

NOTIFYICONDATA nid;



HICON hIcon;

HICON hIcon1;



////////////////////////////////////////////////////////////////////////

int WINAPI WinMain(    HINSTANCE hInstance,

                            HINSTANCE hPrevInstance,

                            LPTSTR    lpCmdLine,

                            int       nCmdShow)

{

     // TODO: Place code here.

      MSG msg;

      InitCommonControls();

                 

      HWND hwnd = CreateDialog(hInstance,MAKEINTRESOURCE(IDD_VOLUME),NULL,DlgProc);

      if (!hwnd)

      {

           RETAILMSG(VOLUME_DEBUG,(TEXT("CreateDialog fail !\r\n")));

           return FALSE;

      }

      

      waveOutGetVolume(0,&CurrentVolume);//得到当前系统消息值

      

      SendMessage(GetDlgItem(hwnd,IDC_SLIDER1), TBM_SETPOS, (WPARAM)TRUE, (0xFFFF-CurrentVolume));

      //加载ICON及静音ICON

      hIcon = LoadIcon(hInstance,MAKEINTRESOURCE(IDI_ICON_ON));

      hIcon1 = LoadIcon(hInstance,MAKEINTRESOURCE(IDI_ICON_OFF));

      //初始化NOTIFYICONDATA结构

      nid.cbSize = (DWORD)sizeof(NOTIFYICONDATA);

      nid.hWnd = hwnd;

      wcscpy(nid.szTip,TEXT("volume"));

      nid.uID = IDI_ICON_ON;

      nid.uFlags = NIF_MESSAGE | NIF_TIP | NIF_ICON;

      nid.uCallbackMessage = WM_SHELL_NOTIFYICON;

      nid.hIcon = hIcon;

      // 调用API Shell_ NotifyIcon加载系统托盘图标

      Shell_NotifyIcon(NIM_ADD,&nid);

      

      SetWindowLong(hwnd,GWL_EXSTYLE,WS_EX_TOOLWINDOW);



      while(GetMessage(&msg,NULL,0,0))

      {

           if (!IsDialogMessage(hwnd,&msg))

           {

                 TranslateMessage(&msg);

                 DispatchMessage(&msg);

            }

      }

      

      return msg.wParam;



}



BOOL CALLBACK DlgProc(HWND hwnd,UINT uMsg,WPARAM wParam,LPARAM lParam)

{

      DWORD x,y;

      switch (uMsg)

      {

      case WM_INITDIALOG://窗口初始化

           {

                 RETAILMSG(VOLUME_DEBUG,(TEXT("OnInitDialog !\r\n")));

                 SendMessage(GetDlgItem(hwnd,IDC_CHECK1),BM_SETCHECK,BST_UNCHECKED,0);

                 SendMessage(GetDlgItem(hwnd,IDC_SLIDER1), TBM_SETRANGEMIN, (WPARAM)TRUE, (LPARAM)0x0);//设置最小音量值

                 SendMessage(GetDlgItem(hwnd,IDC_SLIDER1), TBM_SETRANGEMAX, (WPARAM)TRUE, (LPARAM)0xffff); //设置最大音量值

                 x = SendMessage(GetDlgItem(hwnd,IDC_SLIDER1), TBM_GETRANGEMAX, 0, 0);

                 y = SendMessage(GetDlgItem(hwnd,IDC_SLIDER1), TBM_GETRANGEMIN, 0, 0);

                 RETAILMSG(VOLUME_DEBUG,(TEXT("set volume rang :0x%x--0x%x\r\n"),y,x));

           }

           break;

      case WM_COMMAND:

           {

                 if(SendMessage(GetDlgItem(hwnd,IDC_CHECK1),BM_GETCHECK,0,0) == BST_CHECKED)          //静音

                 {

                      bIsMute = TRUE;

                      waveOutSetVolume(0,0);

                      RETAILMSG(VOLUME_DEBUG,(TEXT("Mute,CurrentVolume =0x%x\r\n"),CurrentVolume));

                      //PostQuitMessage(0);

                      nid.hIcon = hIcon1;

                      Shell_NotifyIcon(NIM_MODIFY,&nid);

                 }

                 else

                 {

                      bIsMute = FALSE;

                      waveOutSetVolume(0,CurrentVolume);

                       RETAILMSG(VOLUME_DEBUG,(TEXT("unMute:CurrentVolume:0x%x\r\n"),CurrentVolume));

                      //PostQuitMessage(0);

                      nid.hIcon = hIcon;

                      Shell_NotifyIcon(NIM_MODIFY,&nid);

                 }

           }

           break;

      case WM_SHELL_NOTIFYICON:  //处理系统托盘消息

           {

                 OnShowIcon(hwnd,wParam,lParam);

           }

           break;

      case WM_ACTIVATE://点击不在窗口时的处理

           {

                 RETAILMSG(VOLUME_DEBUG,(TEXT("WM_ACTIVATE !\r\n")));

                 if (wParam == WA_INACTIVE)

                 {

                      RETAILMSG(VOLUME_DEBUG,(TEXT("WA_INACTIVE !\r\n")));

                      ShowWindow(hwnd,SW_HIDE);

                 }               

           }

           break;

      case WM_VSCROLL://音量控制处理

           {



                 CurrentVolume = SendMessage(GetDlgItem(hwnd,IDC_SLIDER1),TBM_GETPOS,(WPARAM)TRUE,0);

                 CurrentVolume = 0xFFFF-CurrentVolume;



                 if (bIsMute)

                 {

                      //waveOutSetVolume(0,0);

                      RETAILMSG(VOLUME_DEBUG,(TEXT("Mute:CurrentVolume:0x%x\r\n"),CurrentVolume));

                      break;

                 }

                 else

                 {

                      waveOutSetVolume(0,CurrentVolume);

                      RETAILMSG(VOLUME_DEBUG,(TEXT("waveOutSetVolume CurrentVolume=0x%x\r\n"),CurrentVolume));

                 }

           }

           break;

      default:

           break;



      }



      return 0;

}





LRESULT OnShowIcon(HWND hwnd,WPARAM wParam,LPARAM lParam)

{

      if (wParam!=IDI_ICON_ON && wParam!=IDI_ICON_OFF)

      {

           RETAILMSG(VOLUME_DEBUG,(TEXT(" icon err...wParam =%d \r\n"),wParam));

           return FALSE;

      }

      switch (lParam)

      {

      case WM_LBUTTONDBLCLK: //双击,打开系统音量控制程序

           {

                 PROCESS_INFORMATION pi;

                 CreateProcess(_T("\\Windows\\ctlpnl.exe"), _T("\\Windows\\cplmain.cpl,10"),

                      NULL, NULL, FALSE, 0, NULL, NULL, NULL, &pi);

           }

           break;

      case WM_LBUTTONUP: //单击,打开音量控制窗口

           {

                 POINT pt;                        

                 GetCursorPos(&pt);

                 ShowWindow(hwnd,SW_SHOW);

                 SetForegroundWindow(hwnd);

                 MoveWindow(hwnd,pt.x,324,58,128,TRUE);//设置窗口显示位置

           }

           break;

      default:

            break;

      }   

      return 0;

}

 
 
 

回复

83

帖子

0

TA的资源

一粒金砂(初级)

10
 
谢谢楼上的兄弟,我先试下!
 
 
 

回复

82

帖子

0

TA的资源

一粒金砂(初级)

11
 
感谢兄弟们,问题解决,结贴送分。
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

12
 
你的问题如何解决的?
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表