
纯WINAPI编程.pdf
6页/notepaper.cpp:为应用程序定义一入口点#include windows.h#include resource.h#include commctrl.h#define WM_ADJUSTSIZE WM_USER+1 BOOL InitInstance();BOOL InitApp();LRESULT CALLBACK MyWndProc(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam);BOOL CALLBACK MyDlgProc(HWND hDlg,UINT uMsg,WPARAM wParam,LPARAM lParam);void LoadIni();void SaveIni();/全局变量HWND hWnd;HWND hWndToolTip;HWND hEdit=NULL;HINSTANCE hInst;POINT point,oldpoint;RECT rect;char textshow256;INT IniX=0,IniY=0;BOOL bCaptured=FALSE;/-WinMain 函数-int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow)MSG msg;hInst=hInstance;if(!InitInstance()return-1;LoadIni();/导入 INI 文件内容InitCommonControls();/注册或初始化窗口类if(!InitApp()return-1;while(GetMessage(&msg,NULL,NULL,NULL)TranslateMessage(&msg);DispatchMessage(&msg);return msg.lParam;/-BOOL InitInstance()名师资料总结-精品资料欢迎下载-名师精心整理-第 1 页,共 6 页 -WNDCLASSEX wcex;wcex.cbClsExtra=0;wcex.cbWndExtra=0;wcex.style=CS_HREDRAW|CS_VREDRAW|CS_DBLCLKS;wcex.cbSize=sizeof(WNDCLASSEX);wcex.hbrBackground=(HBRUSH)(COLOR_WINDOW+1);wcex.hCursor=LoadCursor(NULL,IDC_ARROW);wcex.hIcon=LoadIcon(NULL,IDI_APPLICATION);wcex.hInstance=hInst;wcex.lpfnWndProc=(WNDPROC)MyWndProc;wcex.lpszClassName=NOTEPAPERWND;wcex.lpszMenuName=NULL;wcex.hIconSm=NULL;if(RegisterClassEx(&wcex)=NULL)return 0;return 1;/-BOOL InitApp()TOOLINFO ti;/工具提示消息(当鼠标放在窗口上时的提示信息)static char tooltip=桌面便条V1.5;hWnd=CreateWindowEx(WS_EX_TOPMOST|WS_EX_TOOLWINDOW,NOTEPAPERWND,NOTEPAPER,WS_BORDER|WS_POPUP,IniX,IniY,0,0,NULL,NULL,hInst,NULL);/创建主窗口if(hWnd=NULL)return FALSE;hWndToolTip=CreateWindow(TOOLTIPS_CLASS,(LPSTR)NULL,TTS_ALWAYSTIP,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,NULL,(HMENU)NULL,hInst,NULL);/创建浮动条窗体memset(&ti,0,sizeof(TOOLINFO);ti.cbSize=sizeof(TOOLINFO);/浮动条消息ti.uFlags=TTF_IDISHWND;ti.hwnd=hWnd;ti.uId=(UINT)hWnd;ti.lpszText=tooltip;SendMessage(hWndToolTip,TTM_ADDTOOL,0,(LPARAM)(LPTOOLINFO)&ti);ShowWindow(hWnd,SW_SHOW);SendMessage(hWnd,WM_ADJUSTSIZE,0,0);UpdateWindow(hWnd);return TRUE;/-LRESULT CALLBACK MyWndProc(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam)HDC hDC;名师资料总结-精品资料欢迎下载-名师精心整理-第 2 页,共 6 页 -PAINTSTRUCT ps;SIZE size;MSG msg;POINT pt;HBRUSH hbr;HFONT hfont,holdfont;static COLORREF clr=RGB(255,0,0),bkclr=RGB(0,255,255);HMENU hmenu;msg.hwnd=hWnd;msg.message=uMsg;msg.wParam=wParam;msg.lParam=lParam;GetCursorPos(&pt);msg.pt.x=pt.x;msg.pt.y=pt.y;CHOOSECOLOR cc;static DWORD adwCustColors16;memset(&cc,0,sizeof(CHOOSECOLOR);cc.lStructSize=sizeof(CHOOSECOLOR);cc.hwndOwner=hWnd;cc.Flags=CC_RGBINIT;cc.lpCustColors=adwCustColors;switch(uMsg)case WM_COMMAND:switch(wParam)case ID_MENUITEM40001:/单击 About 菜单MessageBox(hWnd,桌面便条(纯 WINAPI 调用),桌面便条,MB_OK);break;case ID_MENUITEM40002:/单击 Text Color 菜单cc.rgbResult=clr;if(:ChooseColor(&cc)clr=cc.rgbResult;InvalidateRect(hWnd,NULL,TRUE);break;case ID_MENUITEM40003:/单击 Background Color 菜单cc.rgbResult=bkclr;if(:ChooseColor(&cc)bkclr=cc.rgbResult;InvalidateRect(hWnd,NULL,TRUE);break;case ID_MENUITEM40004:/单击 Write Words 菜单PostMessage(hWnd,WM_LBUTTONDBLCLK,0,0);名师资料总结-精品资料欢迎下载-名师精心整理-第 3 页,共 6 页 -break;case ID_MENUITEM40005:/单击 Exit 菜单PostMessage(hWnd,WM_CLOSE,0,0);break;break;case WM_CREATE:/构造时发送消息break;case WM_ADJUSTSIZE:/移动便条窗口时发送消息hDC=GetDC(hWnd);hfont=CreateFont(18,0,0,0,0,0,0,0,0,0,0,0,FF_MODERN,0);holdfont=(HFONT)SelectObject(hDC,hfont);if(strlen(textshow)=0)strcpy(textshow,NULL!);GetTextExtentPoint32(hDC,textshow,strlen(textshow),&size);hfont=(HFONT)SelectObject(hDC,holdfont);DeleteObject(hfont);ReleaseDC(hWnd,hDC);GetWindowRect(hWnd,&rect);MoveWindow(hWnd,rect.left,rect.top,size.cx+10,size.cy+4,TRUE);break;case WM_PAINT:/重绘时发送消息hfont=CreateFont(18,0,0,0,0,0,0,0,0,0,0,0,FF_MODERN,0);hDC=BeginPaint(hWnd,&ps);holdfont=(HFONT)SelectObject(hDC,hfont);GetClientRect(hWnd,&rect);SetTextColor(hDC,clr);SetBkMode(hDC,TRANSPARENT);hbr=CreateSolidBrush(bkclr);FillRect(hDC,&rect,hbr);DrawText(hDC,textshow,-1,&rect,DT_CENTER|DT_VCENTER|DT_VCENTER|DT_SINGLELINE);hfont=(HFONT)SelectObject(hDC,holdfont);DeleteObject(hfont);EndPaint(hWnd,&ps);DeleteObject(hbr);break;case WM_LBUTTONDOWN:/单击左键时发送消息SetCapture(hWnd);bCaptured=TRUE;GetCursorPos(&oldpoint);break;/传递消息到浮动条窗体.SendMessage(hWndToolTip,TTM_RELAYEVENT,0,(LPARAM)(LPMSG)&msg);名师资料总结-精品资料欢迎下载-名师精心整理-第 4 页,共 6 页 -case WM_MOUSEMOVE:/鼠标键移动时发送消息RECT rect;if(bCaptured)GetWindowRect(hWnd,&rect);GetCursorPos(&point);OffsetRect(&rect,point.x-oldpoint.x,point.y-oldpoint.y);oldpoint=point;MoveWindow(hWnd,rect.left,rect.top,rect.right-rect.left,rect.bottom-rect.top,TRUE);/传递消息到浮动条窗体.SendMessage(hWndToolTip,TTM_RELAYEVENT,0,(LPARAM)(LPMSG)&msg);break;case WM_LBUTTONUP:/左键按起时发送消息if(bCaptured)ReleaseCapture();bCaptured=FALSE;/传递消息到浮动条窗体.SendMessage(hWndToolTip,TTM_RELAYEVENT,0,(LPARAM)(LPMSG)&msg);break;case WM_RBUTTONDOWN:/右键按下时发送消息hmenu=LoadMenu(hInst,(LPCTSTR)IDR_MENU1);POINT point;GetCursorPos(&point);TrackPopupMenu(GetSubMenu(hmenu,0),TPM_LEFTALIGN,point.x,point.y,0,hWnd,0);break;case WM_LBUTTONDBLCLK:/双击左键时发送消息(相当于单击 Write Words 菜单)GetWindowRect(hWnd,&rect);hEdit=。












