怎么编写系统托盘系统自定义消息呢!!简单做个提示框也好。-_-
c语言怎么编写出QQ 微信 这些应用软件那样 在系统托盘任务栏有自己的图标还可以信息提示呢。 刚好最近初学学API调用 查到有这么个函数 <windows.h>Shell_NotifyIcon 可以实现!奈何本人才疏学浅 目前还没有实现哪位仁兄可以指点一二. 本帖最后由 人造人 于 2021-11-9 20:33 编辑#include <windows.h>
#include <wchar.h>
#include <strsafe.h>
#define WM_NOTIFYICON (WM_USER + 1)
HMENU hmenuRoot = NULL;
NOTIFYICONDATA nid;
const TCHAR szAppName[] = TEXT("MyWindows");
LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) {
HDC hdc;
PAINTSTRUCT ps;
RECT rect;
POINT point;
switch(message) {
case WM_CREATE:
hmenuRoot = CreateMenu();
HMENU hmenuPopup = CreatePopupMenu();
AppendMenu(hmenuPopup, MF_STRING, 1, TEXT("A"));
AppendMenu(hmenuPopup, MF_STRING, 2, TEXT("B"));
AppendMenu(hmenuPopup, MF_STRING, 3, TEXT("C"));
AppendMenu(hmenuRoot, MF_POPUP, (UINT_PTR)hmenuPopup, TEXT("MA"));
SetMenu(hwnd, hmenuRoot);
return 0;
case WM_COMMAND:
switch(LOWORD(wParam)) {
case 1:
if(nid.cbSize == sizeof(nid)) {
DestroyIcon(nid.hIcon);
}
ZeroMemory(&nid, sizeof(nid));
nid.cbSize = sizeof(nid);
nid.hWnd = hwnd;
nid.uFlags = NIF_ICON | NIF_TIP | NIF_MESSAGE;
nid.hIcon = LoadIcon(NULL, IDI_APPLICATION);
StringCchCopy(nid.szTip, sizeof(nid.szTip), szAppName);
nid.uCallbackMessage = WM_NOTIFYICON;
Shell_NotifyIcon(NIM_ADD, &nid);
return 0;
case 2:
Shell_NotifyIcon(NIM_DELETE, &nid);
nid.cbSize = 0;
return 0;
case 3:
GetCursorPos(&point);
TrackPopupMenu(GetSubMenu(hmenuRoot, 0), TPM_BOTTOMALIGN | TPM_RIGHTALIGN, point.x, point.y, 0, hwnd, NULL);
return 0;
}
break;
case WM_NOTIFYICON:
switch(lParam) {
case WM_LBUTTONDOWN:
GetCursorPos(&point);
TrackPopupMenu(GetSubMenu(hmenuRoot, 0), TPM_BOTTOMALIGN | TPM_RIGHTALIGN, point.x, point.y, 0, hwnd, NULL);
return 0;
case WM_RBUTTONDOWN:
MessageBox(NULL, "R", "标题", MB_OK);
return 0;
}
break;
case WM_PAINT:
hdc = BeginPaint(hwnd, &ps);
GetClientRect(hwnd, &rect);
DrawText(hdc, TEXT("大家好,这是我的第一个窗口程序!"), -1, &rect, DT_SINGLELINE | DT_CENTER | DT_VCENTER);
EndPaint(hwnd, &ps);
return 0;
case WM_DESTROY:
SendMessage(hwnd, WM_COMMAND, 2, 0);
DestroyMenu(hmenuRoot);
PostQuitMessage(0);
return 0;
}
return DefWindowProc(hwnd, message, wParam, lParam);
}
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow) {
HWND hwnd;
MSG msg;
WNDCLASS wndclass;
wndclass.style = CS_HREDRAW | CS_VREDRAW;
wndclass.lpfnWndProc = WndProc;
wndclass.cbClsExtra = 0;
wndclass.cbWndExtra = 0;
wndclass.hInstance = hInstance;
wndclass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
wndclass.hCursor = LoadCursor(NULL, IDC_ARROW);
wndclass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
wndclass.lpszMenuName = NULL;
wndclass.lpszClassName = szAppName;
if(!RegisterClass(&wndclass)) {
MessageBox(NULL, TEXT("这个程序需要在 Windows NT 才能执行!"), szAppName, MB_ICONERROR);
return 0;
}
hwnd = CreateWindow(szAppName, TEXT("鱼C工作室"), WS_OVERLAPPEDWINDOW, CW_USEDEFAULT,
CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL);
ShowWindow(hwnd, iCmdShow);
UpdateWindow(hwnd);
while(GetMessage(&msg, NULL, 0, 0)) {
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}
谢谢 楼上这位仁兄 。实现了有个窗口单我还是想在系统托盘区域显示。。。想想QQ 似的 有个小小的图标那种
xinbeyon 发表于 2021-11-9 20:50
谢谢 楼上这位仁兄 。实现了有个窗口单我还是想在系统托盘区域显示。。。想想QQ 似的 有个小小的图标那种 ...
你那边没有托盘图标?
不能单击托盘图标?
左键右键都没反应?
看代码,代码中写了什么?
左键/右键单击托盘图标的代码
case WM_NOTIFYICON:
switch(lParam) {
case WM_LBUTTONDOWN:
GetCursorPos(&point);
TrackPopupMenu(GetSubMenu(hmenuRoot, 0), TPM_BOTTOMALIGN | TPM_RIGHTALIGN, point.x, point.y, 0, hwnd, NULL);
return 0;
case WM_RBUTTONDOWN:
MessageBox(NULL, "R", "标题", MB_OK);
return 0;
}
break; 点了A 托盘去有图标了 大神 你的代码好干净 注释都没有哈哈哈 哦,我忘了
左上角的菜单栏 MA
A 添加托盘图标
B 删除托盘图标
C 当前鼠标位置弹出菜单
你不看代码的吗?
你的问题全在代码中的说
xinbeyon 发表于 2021-11-9 20:56
点了A 托盘去有图标了 大神 你的代码好干净 注释都没有哈哈哈
^_^ 高手厉害 点赞 这也太厉害了 xinbeyon 发表于 2021-11-9 21:05
这也太厉害了
花了大概 9 个多小时,^_^ 辛苦辛苦了佩服我昨天琢磨了2小时 都没整明白 惭愧惭愧呀今天一直在线等你大神来指点一二!! 我目前代买太长还看不太懂大神能把最核心拿段 单摘出来我研究研究好以后封装好 xinbeyon 发表于 2021-11-9 21:14
辛苦辛苦了佩服我昨天琢磨了2小时 都没整明白 惭愧惭愧呀今天一直在线等你大神来指点一二!! 我目前 ...
核心的话,感觉就是这个函数吧,Shell_NotifyIcon
xinbeyon 发表于 2021-11-9 21:14
辛苦辛苦了佩服我昨天琢磨了2小时 都没整明白 惭愧惭愧呀今天一直在线等你大神来指点一二!! 我目前 ...
试试数据结构与算法,可以大幅度提高你的编程水平
核心的话,感觉就是这个函数吧,Shell_NotifyIcon
是呀里面要设置好多了东西,我以为像模拟 鼠标 键盘那样简单!!一上来就直接蒙了!!我现在就想简单调用好调试的时候 来代替C 语言那个黑框框。。。在托盘区实现个冒泡信息挺不错的哎还的学习呀
页:
[1]