【时钟显示】将图标显示在系统时间的位置
可能问题有一些太不着边际了:
我想自己做一个时钟显示程序,放在系统托盘处,替换掉老掉牙的系统时间,但是我不能控制我的图标显示的位置【比如始终在最前或最后】。
问题:
我如何才能将我的程序图标放置在系统托盘的最右(将系统时间显示先去掉)?
或者:
我如何才能取得系统时间显示的控制?
给点思路也行呀!
问题点数:100、回复次数:19Top
1 楼eion(那个谁)回复于 2002-03-01 14:49:32 得分 2
我 upTop
2 楼40Star(斯文、大方、有前途)回复于 2002-03-01 14:56:24 得分 2
强烈关注!!!Top
3 楼kook(疯子)回复于 2002-03-01 14:59:55 得分 2
有点意思,不过好象没什么实际意义Top
4 楼ma811(马头)回复于 2002-03-01 15:01:08 得分 2
用FindWindow和FindWindowEx找到下面托盘的HWND,之后...Top
5 楼xiaotao0432(白开水)回复于 2002-03-01 15:07:05 得分 2
学习Top
6 楼niu_a(阿牛)回复于 2002-03-01 15:20:04 得分 30
那是一个控制面板扩展程序,
TimeData.cpl,用自己的程序替换它Top
7 楼fireseed(【VC无敌,英明神武,千秋万代,一统江湖!】—奶油狗)回复于 2002-03-01 15:49:24 得分 5
自创源码如下!!
#include <afxwin.h>
#define IDC_EXIT 100
#define WM_NOTIFYICON 101
#define ID_MYNOTIFYICON 102
#define IDW_MAINWND 0
class CFashionApp :public CWinApp
{
public:
virtual BOOL InitInstance();
~CFashionApp();
public:
NOTIFYICONDATA m_tnid;//////////////////////这里定义
};
class CFashionWnd:public CWnd
{
public:
CFashionWnd();
CMenu m_PopMenu;
protected:
void OnNotifyIcon(WPARAM wParam, LPARAM lParam);//定义消息处理函数
void OnExit();//定义菜单消息函数-退出
DECLARE_MESSAGE_MAP()
};
BEGIN_MESSAGE_MAP(CFashionWnd, CWnd)
ON_MESSAGE(WM_NOTIFYICON, OnNotifyIcon)
ON_COMMAND(IDC_EXIT, OnExit)
END_MESSAGE_MAP()
CFashionWnd::CFashionWnd()
{
CString strMyClass=AfxRegisterWndClass(CS_HREDRAW|CS_DBLCLKS,
::LoadCursor(::AfxGetInstanceHandle(),IDC_ARROW),
HBRUSH(COLOR_WINDOWFRAME),
::LoadIcon(NULL,IDI_APPLICATION)
);
CreateEx(WS_EX_TOOLWINDOW|WS_EX_TOPMOST,
strMyClass,
_T("Creamdog"),
WS_SYSMENU|WS_THICKFRAME,
CRect(0,0,400,400),
NULL,
IDW_MAINWND);
//添加菜单
m_PopMenu.CreatePopupMenu();
m_PopMenu.AppendMenu(MF_STRING,IDC_EXIT,"Exit");
};
void CFashionWnd::OnNotifyIcon(WPARAM wParam, LPARAM lParam)
{
UINT uID;
UINT uMouseMsg;
uID = (UINT) wParam;
uMouseMsg = (UINT) lParam;
if(uMouseMsg == WM_RBUTTONDOWN)
{
CPoint point;
::GetCursorPos(&point);
m_PopMenu.TrackPopupMenu(TPM_LEFTALIGN,point.x,point.y,this,NULL);
}
if(uMouseMsg == WM_LBUTTONDOWN)
{
WINDOWPLACEMENT wpm;
GetWindowPlacement(&wpm);
if(wpm.showCmd==SW_SHOWMINIMIZED)
ShowWindow(SW_RESTORE);
else
{
ShowWindow(SW_MINIMIZE);
ShowWindow(SW_HIDE);
}
}
}
void CFashionWnd::OnExit()
{
PostQuitMessage(1);
}
CFashionApp::~CFashionApp()
{
Shell_NotifyIcon(NIM_DELETE, &m_tnid);////////这里添加图标
}
BOOL CFashionApp::InitInstance()
{
m_pMainWnd=new CFashionWnd;
m_tnid.cbSize = sizeof(NOTIFYICONDATA);
m_tnid.hWnd = m_pMainWnd->GetSafeHwnd();
m_tnid.uID = ID_MYNOTIFYICON;
m_tnid.uFlags = NIF_MESSAGE | NIF_ICON | NIF_TIP;
m_tnid.uCallbackMessage = WM_NOTIFYICON;
m_tnid.hIcon = ::LoadIcon(NULL,IDI_APPLICATION);
strcpy(m_tnid.szTip, "This is my app!");
Shell_NotifyIcon(NIM_ADD, &m_tnid);
m_pMainWnd->ShowWindow(SW_SHOWNORMAL);
return TRUE;
}
CFashionApp myApp;
有错与我联系
没错给我加分!!!Top
8 楼ruixp(锐剑)回复于 2002-03-01 15:53:17 得分 2
不错Top
9 楼ooKid(网络闲人)回复于 2002-03-01 16:12:41 得分 0
to fireseed() :
Sorry。你的程序不符合要求。
我的目的是要在系统时钟的地方显示图标【不是系统托盘的任意一区域显示】
我如何才能将我的程序图标放置在系统托盘的最右(将系统时间显示先去掉)?Top
10 楼40Star(斯文、大方、有前途)回复于 2002-03-01 16:15:13 得分 3
我见过老外编的程序就是可以
但我不会,继续UPTop
11 楼niu_a(阿牛)回复于 2002-03-01 16:19:20 得分 5
你把timedata.cpl用你的程序替换掉,就可以了Top
12 楼0313700000(^她^的@妈妈@不爱我)回复于 2002-03-01 16:22:40 得分 2
xuexiTop
13 楼ooKid(网络闲人)回复于 2002-03-01 16:30:34 得分 0
to niu_a(阿牛):
我用的是Windows2000, 找不到timedata.cpl文件Top
14 楼ooKid(网络闲人)回复于 2002-03-01 16:36:12 得分 0
原来是
timedate.cpl
不过我替换了,好像不管用
Top
15 楼ooKid(网络闲人)回复于 2002-03-01 16:38:07 得分 0
而且系统的timedate.cpl能运行【有界面】,而我的怎么没有?
cpl又是什么文件?请问Top
16 楼eion(那个谁)回复于 2002-03-01 17:03:35 得分 5
to 阿牛:
.cpl文件到底可以怎么做?VC可以写吗?如果可以又该怎么写?Top
17 楼kook(疯子)回复于 2002-03-01 17:23:52 得分 5
cpl就是DLL,只是输出为cpl文件而已,control.exe会自动调用(system目录下的cpl文件)Top
18 楼eion(那个谁)回复于 2002-03-01 18:06:26 得分 30
看来这个问题好难回答罗
首先要写DLL
其次要在DLL中显示对话框
再次要注册图标于系统托盘
然后.....
呵呵才能动手
还有..............
control调用cpl的接口函数应该是什么?参数呢?Top
19 楼eion(那个谁)回复于 2002-03-04 14:43:45 得分 3
没人接手了Top
20 楼ooKid(网络闲人)回复于 2002-03-04 15:44:26 得分 0
完了,看来没人帮我了——如eion(电离子)所说,问题太多了
在等等Top




