#include <windows.h>
#include <stdio.h>
#include "resource.h"
#include<math.h>
#include"SkinH.h"
#define WS_EX_LAYERED 0x80000
#define WM_CLOCK WM_USER+1
typedef BOOL (WINAPI*FPT)(HWND,int,BOOL,DWORD);
FPT fp;
HBITMAP bp;
HDC hdc,memdc;
HINSTANCE hIns;
POINT lb_pt;
POINT current_pt;
POINT window_pt;
bool press_flag;
HMENU hMenu;
HICON hIcon;
NOTIFYICONDATA nid;
#pragma comment(lib,"SkinHu.lib")
LRESULT CALLBACK WinSunProc(
HWND hwnd, // handle to window
UINT uMsg, // message identifier
WPARAM wParam, // first message parameter
LPARAM lParam // second message parameter
);int WINAPI WinMain(
HINSTANCE hInstance, // handle to current instance
HINSTANCE hPrevInstance, // handle to previous instance
LPSTR lpCmdLine, // command line
int nCmdShow // show state
)
{
WNDCLASS wndcls;
wndcls.cbClsExtra=0;
wndcls.cbWndExtra=0;
wndcls.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);
wndcls.hCursor=LoadCursor(NULL,IDC_CROSS);
wndcls.hIcon=LoadIcon(NULL,IDI_ERROR);
wndcls.hInstance=hInstance;
wndcls.lpfnWndProc=WinSunProc;
wndcls.lpszClassName= "Weixin2003";
wndcls.lpszMenuName=NULL;
wndcls.style=CS_HREDRAW | CS_VREDRAW;
RegisterClass(&wndcls);
HWND hwnd;
window_pt.x = GetSystemMetrics(SM_CXSCREEN)-720;
window_pt.y = 0;
hwnd=CreateWindowEx(WS_EX_TOPMOST|WS_EX_LAYERED|WS_EX_TOOLWINDOW, "Weixin2003",NULL,WS_POPUP|WS_SYSMENU,
window_pt.x,window_pt.y,720,474,NULL,NULL,hInstance,NULL);
bp = LoadBitmap(hInstance, MAKEINTRESOURCE(IDB_BITMAP1));
hIns = hInstance;
ShowWindow(hwnd,SW_SHOWNORMAL);
UpdateWindow(hwnd); MSG msg;
while(GetMessage(&msg,NULL,0,0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return 0;
}
void DrawClock( HWND hwnd )
{
bp = LoadBitmap(hIns, MAKEINTRESOURCE(IDB_BITMAP1));
SYSTEMTIME tm;
hdc = GetDC(hwnd);
memdc=CreateCompatibleDC(hdc);
SelectObject(memdc,bp);
BitBlt(hdc,0,0,720,474,memdc,0,0,SRCCOPY);
GetLocalTime(&tm);
HBRUSH RedBrush;
char str[10];
SetTextColor(hdc,RGB(255,0,0));
sprintf(str,"%02d:%02d:%02d\0",tm.wHour,tm.wMinute,tm.wSecond);
// float pts[4];
RedBrush = CreateSolidBrush(RGB(255,0,0));
TextOut(hdc,333,340,str,strlen(str));
ReleaseDC(hwnd,hdc);
//tm.
}
LRESULT CALLBACK WinSunProc(
HWND hwnd, // handle to window
UINT uMsg, // message identifier
WPARAM wParam, // first message parameter
LPARAM lParam // second message parameter
)
{
HMODULE hsad=LoadLibrary("user32.dll");
TCHAR str[]="I love You";
switch(uMsg)
{
case WM_CREATE:
fp=(FPT)GetProcAddress(hsad,"SetLayeredWindowAttributes");
FreeLibrary(hsad);
fp(hwnd,RGB(255,255,255),200,3);
SetTimer(hwnd,1,1000,NULL);
SkinH_Attach();
hIcon=LoadIcon(hIns,MAKEINTRESOURCE(IDI_CLOCK));
nid.cbSize=(DWORD)sizeof(NOTIFYICONDATA);//请看这里………………………………………………
nid.hIcon=hIcon;//请看这里……………………………………………… nid.hWnd=hwnd;//请看这里……………………………………………… strcpy(nid.szTip,"love clock"););//请看这里……………………………………………… nid.uCallbackMessage = WM_CLOCK;);//请看这里……………………………………………… nid.uID=IDI_CLOCK;//请看这里…………………………………………………………
nid.uFlags=NIF_ICON|NIF_MESSAGE|NIF_TIP;//请看这里………………………………………………
Shell_NotifyIcon(NIM_ADD,&nid);//请看这里…………………………………………
break;
case WM_CLOCK:
break;
case WM_TIMER:
DrawClock(hwnd);
// ReleaseDC(hwnd,hdc);
break;
case WM_MOUSEMOVE:
POINT pt;
pt.x = LOWORD(lParam);
pt.y = HIWORD(lParam);
ClientToScreen(hwnd,&pt);
if(TRUE == press_flag)
MoveWindow(hwnd,window_pt.x + (pt.x - current_pt.x),
window_pt.y + pt.y - current_pt.y,720,474,FALSE); break;
case WM_CHAR:
break;
case WM_LBUTTONDOWN:
press_flag = true;
HDC hdc;
bool flag;
flag = Shell_NotifyIcon(NIM_ADD,&nid);
hdc=GetDC(hwnd);
current_pt.x = LOWORD(lParam);
current_pt.y = HIWORD(lParam);
ClientToScreen(hwnd,¤t_pt);
ReleaseDC(hwnd,hdc);
break;
case WM_LBUTTONUP:
POINT up_pt;
press_flag = FALSE;
up_pt.x = LOWORD(lParam);
up_pt.y = HIWORD(lParam);
ClientToScreen(hwnd,&up_pt);
window_pt.y += up_pt.y - current_pt.y;
window_pt.x += up_pt.x - current_pt.x;
break;
case WM_RBUTTONDOWN:
POINT rb_pt;
GetCursorPos(&rb_pt);
hMenu=LoadMenu(hIns,LPCSTR(IDR_MENU1));
hMenu=GetSubMenu(hMenu,0);
TrackPopupMenu(hMenu,TPM_LEFTALIGN,rb_pt.x,rb_pt.y,0,hwnd,NULL);
break;
case WM_PAINT:
PAINTSTRUCT ps;
hdc=BeginPaint(hwnd,&ps);
// memdc=CreateCompatibleDC(hc);d
// SelectObject(memdc,bp);
// BitBlt(hdc,0,0,720,474,memdc,0,0,SRCCOPY);
EndPaint(hwnd,&ps);
break;
case WM_LBUTTONDBLCLK:
Shell_NotifyIcon(NIM_ADD,&nid);
case WM_COMMAND:
switch(wParam)
{
case ID_MEIXT:
SendMessage(hwnd,WM_CLOSE,0,0);
break;
case ID_MHIDE:
break;
case ID_MSET:
break;
}
break;
case WM_CLOSE:
if(IDYES==MessageBox(hwnd, "是否真的结束?", "weixin",MB_YESNO))
{
DestroyWindow(hwnd);
}
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hwnd,uMsg,wParam,lParam);
}
return 0;
}
问题 上面的代码主要看下我注释的那几行 注释为(请看这里…………………………………………) 我调试的时候发现加载图标是成功的,但是我运行的时候托盘里显示的图标并非我想要的,而是一个?的图标!!!
hIcon=LoadIcon(hIns,MAKEINTRESOURCE(IDI_CLOCK));
看看这个ID是不是你想要显示图标的ID,另外,如果是自定义图标的话,大小也有限制,好像有16*16,48*48的