16,548
社区成员




LRESULT CALLBACK WndProc (HWND hWnd,UINT msg,WPARAM wParam,LPARAM lParam)
{
PAINTSTRUCT ps;
HDC hdc;
POINT pt;
switch(msg)
{
case WM_PAINT:
hdc = BeginPaint(hWnd, &ps);
// TODO: 在此添加任意绘图代码...
EndPaint(hWnd, &ps);
break;
case WM_ICONNOTIFY:
switch (lParam)
{
case WM_RBUTTONDOWN: //对右键的反应
break;
case WM_LBUTTONDBLCLK:
break;
default:
break;
}
break;
case WM_CLOSE:
PostQuitMessage(0);
::Shell_NotifyIcon(NIM_DELETE, &nid);
break;
case WM_DESTROY:
PostQuitMessage(0);
::Shell_NotifyIcon(NIM_DELETE, &nid);
break;
}
return DefWindowProc(hWnd,msg,wParam,lParam);
}
vs2008下编译通过 愿顺利 阿弥陀佛!
#include <windows.h>
#include <tchar.h>
#include "trace.h"
#include "resource.h"
#define WM_PROC WM_USER+100
// struct for Shell_NotifyIcon args
NOTIFYICONDATA m_nid;
/****************************************************************************
创建托盘图标函数
****************************************************************************/
bool SetupTrayIcon(HWND m_hWnd)
{
m_nid.cbSize=sizeof(NOTIFYICONDATA); // 结构大小(sizeof struct),必须设置
m_nid.hWnd=m_hWnd; // 接收 托盘通知消息 的窗口句柄
m_nid.uID=IDI_ICON; // 图标ID ( 由回调函数的WPARAM 指定)
m_nid.uFlags=NIF_MESSAGE //表示uCallbackMessage 有效 #define NIF_MESSAGE 0x1
|NIF_ICON //表示hIcon 有效 #define NIF_ICON 0x2
|NIF_TIP; //表示szTip 有效 #define NIF_TIP 0x4
m_nid.uCallbackMessage=WM_PROC; // 消息被发送到此窗口过程
m_nid.hIcon=::LoadIcon(::GetModuleHandle(NULL),MAKEINTRESOURCE(IDI_ICON)); // 图标句柄
strcpy(m_nid.szTip,"我的任务栏程序"); // 提示文本
return 0!=Shell_NotifyIcon(NIM_ADD,&m_nid);
}
HWND CreateWnd();
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow)
{
HWND hWnd=CreateWnd();
SetupTrayIcon(hWnd); //创建托盘图标
MSG msg;
while(GetMessage(&msg,NULL,0,0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam ;
}
LRESULT CALLBACK WndProc(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam)
{
switch(message)
{
case WM_PROC:
{
switch((UINT)lParam)
{
case WM_RBUTTONDOWN:
{
//Win32创建菜单
POINT point;
::GetCursorPos(&point);
HMENU hMenuPopup = CreatePopupMenu () ;
AppendMenu(hMenuPopup, MF_STRING, 1, "统计字符个数");
AppendMenu(hMenuPopup, MF_STRING, 2, "&Open...");
AppendMenu(hMenuPopup, MF_STRING, 3, "Save &As...");
AppendMenu(hMenuPopup, MF_SEPARATOR, 0, NULL) ;
AppendMenu(hMenuPopup, MF_STRING, 4, "E&xit") ;
TrackPopupMenu (hMenuPopup, TPM_RIGHTBUTTON, point.x, point.y, 0, hWnd, NULL) ;
DestroyMenu (hMenuPopup);
}
break;
}
}
case WM_COMMAND:
{
switch(wParam)
{
case 1:
{
::MessageBox(NULL,TEXT("1"),NULL,MB_OK);
}
break;
case 2:
{
::MessageBox(NULL,TEXT("2"),NULL,MB_OK);
}
break;
}
}
break;
case WM_CLOSE:
{
Shell_NotifyIcon(NIM_DELETE,&m_nid);//删除任务栏图标
DestroyWindow(hWnd);//既关闭按钮,可以在此时询问用户是否确定要关闭,再调用DestroyWindow关闭程序
}
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hWnd,message,wParam,lParam);
}
return 0;
}
HWND CreateWnd()
{
WNDCLASS wndcls;
wndcls.cbClsExtra = 0;
wndcls.cbWndExtra = 0;
wndcls.lpszMenuName = NULL;
wndcls.hInstance = NULL;
wndcls.style = NULL/*CS_HREDRAW|CS_VREDRAW*/;
wndcls.hCursor = LoadCursor(NULL,IDC_ARROW);
wndcls.lpszClassName = _T("Win32");
wndcls.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
wndcls.hIcon = LoadIcon(::GetModuleHandle(NULL),MAKEINTRESOURCE(IDI_ICON));
wndcls.lpfnWndProc = WndProc;
if (!RegisterClass(&wndcls))
return NULL;
HWND hWnd = CreateWindowEx(WS_EX_TOPMOST,
_T("Win32"),
_T("Demo"),
WS_OVERLAPPEDWINDOW,
225,160,400,400,NULL,NULL,NULL,NULL) ;
if (!hWnd)
return NULL;
ShowWindow(hWnd,SW_SHOWNORMAL);
UpdateWindow(hWnd);
return hWnd;
}