做了一个对话框,需要按下“最小化”按钮的时候,最小化到系统托盘,但是那个数据结构(NOTIFYICONDATA)不知道该怎么填写?

SteveYoung 2004-06-23 01:27:37
大家好,我现在在做一个对话框,但是遇到了几个难题,我看过Iczelion的Win32教材关于这个功能的例子程序,但是他是以窗口来作为例子讲的,我现在做对话框可以根据这个例子为原型来做吗?

我在资源文件中定义了2个图标,在给NOTIFYICONDATA赋值时,NOTIFYICONDATA结构中的uID应该填这2个图标的ID值么?(二者选一?)----因为我看到Iczelion的赋值的图标ID并未在资源文件中定义。

谢谢了,请高手解答一下吧。非常感谢!!!!
...全文
106 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
紫郢剑侠 2004-07-19
  • 打赏
  • 举报
回复
ICZTUTES里有现成的代码。
smallmaster 2004-07-17
  • 打赏
  • 举报
回复
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
int wmId, wmEvent;
HMENU hMenu;
HICON hIcon;
POINT stPoint;
NOTIFYICONDATA stNoti;
hMenu = CreatePopupMenu();
AppendMenu(hMenu,MF_STRING,IDM_SHOW,"显示主窗口");
AppendMenu(hMenu,MF_STRING,IDM_ABOUT,"关于");
AppendMenu(hMenu,MF_STRING,IDM_EXIT,"退出");
hIcon = LoadIcon(hInst,(LPCTSTR)IDI_MAIL_OFFICER);
stNoti.cbSize = sizeof NOTIFYICONDATA;
stNoti.hIcon = hIcon;
stNoti.hWnd = hWnd;
stNoti.uCallbackMessage = WM_SHELLNOTIFY;
stNoti.uFlags = NIF_MESSAGE|NIF_ICON|NIF_TIP;
strcpy(stNoti.szTip,"message");

switch (message)
{
case WM_INITDIALOG:
hWin = hWnd;
SendMessage(hWnd,WM_SETICON,ICON_BIG,WORD(hIcon));

break;
case WM_COMMAND:
wmId = LOWORD(wParam);
wmEvent = HIWORD(wParam);
// Parse the menu selections:
switch (wmId)
{
case IDM_ABOUT:
DialogBoxParam(hInst, (LPCTSTR)IDD_ABOUTBOX, hWnd, (DLGPROC)About,NULL);
break;
case IDCANCEL:
EndDialog(hWnd,0);
ExitProcess(0);
break;
case IDM_EXIT:
ExitProcess(0);
break;
case IDC_ABOUT:
DialogBoxParam(hInst, (LPCTSTR)IDD_ABOUTBOX, hWnd, (DLGPROC)About,NULL);
break;
case IDM_SHOW:
ShowWindow(hWnd,SW_RESTORE);
break;
case IDOK:
//DWORD dwThreadID;
//CreateThread(NULL,NULL,ConnectProc,NULL,NULL,&dwThreadID);
default:
return FALSE;
}
break;
case WM_CLOSE:
EndDialog(hWnd,0);
WSACleanup();
ExitProcess(0);
break;
case WM_SIZE:
if (wParam == SIZE_MINIMIZED)
{
ShowWindow(hWnd,SW_HIDE);
Shell_NotifyIcon(NIM_ADD,&stNoti);
}
else
{
Shell_NotifyIcon(NIM_DELETE,&stNoti);
}
break;
case WM_SHELLNOTIFY:
if (LOWORD(lParam) == WM_RBUTTONDOWN)
{
GetCursorPos(&stPoint);
SetForegroundWindow(hWnd);
TrackPopupMenu(hMenu,TPM_LEFTALIGN,stPoint.x,stPoint.y,NULL,hWnd,NULL);
PostMessage(hWnd,WM_NULL,0,0);
}
break;
case WM_SOCKET:
switch(LOWORD(lParam))//套接字消息处理
{
case FD_CONNECT:
if (HIWORD(lParam))
{//连接失败
closesocket(hSocket);
hSocket=NULL;
MessageBox(0,"失败",0,MB_OK);

}
else
{
bConnected = TRUE;
// SetWindowText(GetDlgItem(hWnd,IDOK),"断开");
//EnableWindow(GetDlgItem(hWnd,IDOK),FALSE);
MessageBox(0,"成功",0,MB_OK);
char* szUser="USER vsmb\r\n";
}
break;

}
break;
default:
return FALSE;
}
return TRUE;
}
我把原来在VC上的代码给你,自己翻译一下吧!
SteveYoung 2004-06-23
  • 打赏
  • 举报
回复
非常感谢大哥的指导!!!!!!!!!!

我知道一句“谢谢”并不能代表我对您的感激之情,但是请接受我衷心地谢意!!!!!!!
SteveYoung 2004-06-23
  • 打赏
  • 举报
回复
LoadIcon得到的句柄是送给 NOTIFYICONDATA 的 hIcon 成员,对么?
那么NOTIFYICONDATA 的 uID成员,是不是应该送成我自己定义的图标ID呢?
dunkel 2004-06-23
  • 打赏
  • 举报
回复
要 LoadIcon 啊, 将得道的 HANDLE 赋给结构的 .hIcon 不是直接给图标的 ID
SteveYoung 2004-06-23
  • 打赏
  • 举报
回复
谢谢大哥的回答,那么如果我在资源中定义了自己的图标,那么这里是不是要指定自己定义的图标的ID呢?

麻烦了,不好意思,我总是这么菜。
dunkel 2004-06-23
  • 打赏
  • 举报
回复
uID 小图标的ID号。您可以取任意值,只是当您的应用程序有不止一个小图标时,您要能够区分出到底是那一个小图标接收到了鼠标的消息,也即ID号必须唯一。

21,499

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧