// DrawItem.cpp : Defines the entry point for the application.
//自绘按钮,剪贴板,热键,剪贴板,微调按钮的使用。
//功能:利用剪贴板实现SN的简单填写。
#include "stdafx.h"
#include "resource.h"
#include <commctrl.h>
BOOL myDlg( HWND hwndDlg, // handle to dialog box
UINT uMsg, // message
WPARAM wParam, // first message parameter
LPARAM lParam // second message parameter
);
HINSTANCE hInst;
HWND hBtn;
HBITMAP hBmp;
HWND hSpin;//微调控件句柄
HWND hEdit;//文本框控件句柄
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
// TODO: Place code here.
hInst=hInstance;
INITCOMMONCONTROLSEX incx;
incx.dwICC=ICC_UPDOWN_CLASS;
incx.dwSize=sizeof(INITCOMMONCONTROLSEX);
InitCommonControlsEx(&incx);
DialogBoxParam(hInstance,MAKEINTRESOURCE(IDD_DIALOG1),0,(DLGPROC)myDlg,(IDD_DIALOG1));
return 0;
}
BOOL myDlg(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam )
{
LPDRAWITEMSTRUCT lpdis;
HDC hMemDC;
switch(uMsg)
{
case WM_INITDIALOG:
hBtn=CreateWindow("BUTTON","Test",WS_CHILD|WS_VISIBLE|BS_OWNERDRAW,
100,50,50,50,hwndDlg,HMENU(IDC_BTN),hInst,NULL);
hBmp=LoadBitmap(hInst,MAKEINTRESOURCE(IDB_BITMAP1));
hEdit=CreateWindow("EDIT",NULL,WS_VISIBLE|WS_CHILD|WS_BORDER|ES_NUMBER,10,10,100,20,hwndDlg,
(HMENU)IDC_EDIT,hInst,NULL);
SendMessage(hEdit,EM_LIMITTEXT,2,0);
SetDlgItemInt(hwndDlg,IDC_EDIT,5,FALSE);
hSpin=CreateUpDownControl(WS_CHILD|WS_VISIBLE|WS_BORDER,110,10,20,20,hwndDlg,IDC_SPIN,hInst,hEdit,99,1,5);
RegisterHotKey(hwndDlg,300,MOD_SHIFT,0x56);
break;
case WM_DRAWITEM:
lpdis=(LPDRAWITEMSTRUCT)lParam;
hMemDC=CreateCompatibleDC(lpdis->hDC);
SelectObject(hMemDC,hBmp);
StretchBlt(lpdis->hDC,lpdis->rcItem.left,lpdis->rcItem.top,
lpdis->rcItem.right-lpdis->rcItem.left,
lpdis->rcItem.bottom-lpdis->rcItem.top,hMemDC,0,0,32,32,SRCCOPY);
DeleteObject(hMemDC);
break;
case WM_NOTIFY:
if(wParam==IDC_SPIN)
{
LPNMUPDOWN np;
np=(LPNMUPDOWN)lParam;
SetDlgItemInt(hwndDlg,IDC_EDIT,np->iDelta+np->iPos,FALSE);
}
break;
case WM_COMMAND:
switch(LOWORD(wParam))
{
case IDOK:
EndDialog(hwndDlg,FALSE);
break;
case IDCANCEL:
EndDialog(hwndDlg,FALSE);
break;
case IDC_BTN:
if (HIWORD(wParam)==BN_CLICKED)
{
MessageBox(hwndDlg,"Test","Test",MB_OK);
}
break;
}
break;
case WM_HOTKEY:
// MessageBox(hwndDlg,"Test","Test",MB_OK);
HGDIOBJ hgob;
LPTSTR lpstr;
int i,len,j;
if(!OpenClipboard(hwndDlg))
{
return FALSE;
}
hgob=GetClipboardData(CF_TEXT);
if(hgob!=NULL)
{
lpstr=(LPTSTR)GlobalLock(hgob);
if(lpstr!=NULL)
{
HDC hdc;
RECT rc;
hdc=GetDC(hwndDlg);
//TextOut(hdc,20,100,lpstr,sizeof(lpstr));
SetRect(&rc,20,100,200,120);
DrawText(hdc,lpstr,strlen(lpstr),&rc,DT_CENTER);
// memcpy(glpstr,lpstr,strlen(lpstr));
ReleaseDC(hwndDlg,hdc);
GlobalUnlock(hgob);
CloseClipboard();
}
}
i=GetDlgItemInt(hwndDlg,IDC_EDIT,NULL,FALSE);
if(i==0)
{
MessageBox(hwndDlg,"最小间隔不能为零!","错误",MB_OK);
return FALSE;
}
len=strlen(lpstr);
char* templ;
HGDIOBJ hTempl;
hTempl=GlobalAlloc(GMEM_MOVEABLE,len+1);
templ=(LPTSTR)GlobalLock(hTempl);
memcpy(templ,lpstr,len+1);
GlobalUnlock(hTempl);
// GlobalFree(hTempl);
for(j=0;j<=len%i;j++)
{
char* temp;
HGDIOBJ hTemp;
if(!OpenClipboard(hwndDlg))
{
MessageBox(NULL,"Error","Error",MB_OK);
return FALSE;
}
EmptyClipboard();
hTemp=GlobalAlloc(GMEM_MOVEABLE,i+1);
temp=(LPTSTR)GlobalLock(hTemp);
memset(temp,0,i+1);
if(j==0)
{
lstrcpyn(temp,templ+i*j,i+1);
}
else
{
lstrcpyn(temp,templ+i*j+j,i+1);
}
GlobalUnlock(hTemp);
SetClipboardData(CF_TEXT,hTemp);
CloseClipboard();
Sleep(100);
keybd_event(VK_CONTROL,0,0,0);
keybd_event(0x56,0,0,0);
keybd_event(0x56,0,KEYEVENTF_KEYUP,0);
keybd_event(VK_CONTROL,0,KEYEVENTF_KEYUP,0);
//123-456-789
Sleep(100);
keybd_event(VK_TAB,0,0,0);
keybd_event(VK_TAB,0,KEYEVENTF_KEYUP,0);
//Sleep(1000);
}
GlobalFree(hTempl);
break;
case WM_CLOSE:
UnregisterHotKey(hwndDlg,300);
EndDialog(hwndDlg,FALSE);
break;
default:
return FALSE;
}
return TRUE;
}