Windows API 函数学习(14)---SN填写代码

 // 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;
}

 

 

posted @ 2007-04-12 09:48  巨巨  阅读(232)  评论(0编辑  收藏  举报