VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

搜索
查看: 827|回复: 4

[转载] 大家来找茬挂

[复制链接]
36_avatar_middle
最佳答案
0 
在线会员 发表于 2019-5-17 13:06:24 | 显示全部楼层 |阅读模式
#include <windows.h>
#include "resource.h"

#define         ID_TIMER 1
LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ;

POINT        left,right;
int         height,width;
int                cxSize,cySize;
HDC        hdcMem;/////////////////////////内存DC
HBITMAP hBitmap;
POINT                pt;

int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
                     PSTR szCmdLine, int iCmdShow)
{
      static TCHAR szAppName[] = TEXT ("SCR_COPY") ;
      HWND         hwnd ;
      MSG          msg ;
      WNDCLASS     wndclass ;

      wndclass.style         = CS_HREDRAW | CS_VREDRAW ;
      wndclass.lpfnWndProc   = WndProc ;
      wndclass.cbClsExtra    = 0 ;
      wndclass.cbWndExtra    = 0 ;
      wndclass.hInstance     = hInstance ;
      wndclass.hIcon         = LoadIcon (hInstance,szAppName) ;
      wndclass.hCursor       = LoadCursor (NULL, IDC_ARROW) ;
      wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH) ;
      wndclass.lpszMenuName  = szAppName ;
      wndclass.lpszClassName = szAppName ;

      if (!RegisterClass (&wndclass))
      {
           MessageBox (NULL, TEXT ("This program requires Windows NT!"),
                       szAppName, MB_ICONERROR) ;
           return 0 ;
      }
      
      hwnd = CreateWindow (szAppName,                  // window class name
                           TEXT ("SCR_COPY"), // window caption
                           WS_OVERLAPPEDWINDOW,        // window style
                           CW_USEDEFAULT,              // initial x position
                           CW_USEDEFAULT,              // initial y position
                           CW_USEDEFAULT,              // initial x size
                           CW_USEDEFAULT,              // initial y size
                           NULL,                       // parent window handle
                           NULL,                       // window menu handle
                           hInstance,                  // program instance handle
                           NULL) ;                     // creation parameters
      
      ShowWindow (hwnd, iCmdShow) ;
      UpdateWindow (hwnd) ;
      
      while (GetMessage (&msg, NULL, 0, 0))
      {
           TranslateMessage (&msg) ;
           DispatchMessage (&msg) ;
      }

         

      return msg.wParam ;
}
///////////////////////////////////////////////////////////////////
void CALLBACK TimerProc(HWND hwnd,UINT message,UINT iTimerID,DWORD dwTime)
{
         HDC        hdc_me = GetDC(hwnd);
         POINT        pos,pos2;
         HBRUSH        hBrush;
         BitBlt(hdc_me,0,pt.y,width,height,
                    hdcMem,0,0,SRCCOPY);  
         hBrush = CreateSolidBrush(RGB(255,100,255));
         SelectObject(hdc_me,hBrush);

         GetCursorPos(&pos);
         pos2 = pos;
         ScreenToClient(hwnd,&pos2);
         Ellipse(hdc_me,pos.x-cxSize/2-5,pos2.y-5,pos.x-cxSize/2+5,pos2.y+5);
         DeleteObject(hBrush);
         ReleaseDC(hwnd,hdc_me);

}
///////////////////////////////////////////////////////////////////
BOOL CALLBACK AboutDlgProc(HWND hDlg,UINT message,WPARAM wParam,LPARAM lParam)
{
         switch(message)
         {
         case WM_INITDIALOG:
                 return TRUE;
         case WM_COMMAND:
                 switch(LOWORD(wParam))
                 {
                 case IDOK:
                         EndDialog(hDlg,0);
                         return TRUE;
                 }
                 break;
         }
         
         return FALSE;
}
///////////////////////////////////////////////////////////////////
BOOL CALLBACK DlgProc(HWND hDlg,UINT message,
                                           WPARAM wParam,LPARAM lParam)
{

         switch(message)
         {
                 case WM_INITDIALOG:
                         SetDlgItemInt(hDlg,IDC_L_X,left.x,0);
                         SetDlgItemInt(hDlg,IDC_L_Y,left.y,0);
                         SetDlgItemInt(hDlg,IDC_R_X,right.x,0);
                         SetDlgItemInt(hDlg,IDC_R_Y,right.y,0);
                         SetDlgItemInt(hDlg,IDC_HEIGHT,height,0);
                         SetDlgItemInt(hDlg,IDC_WIDTH, width,0);
                                 return 0;
                 case WM_CLOSE:
                         EndDialog(hDlg,FALSE);
                         return 0;
                 case WM_COMMAND:
                         switch(LOWORD(wParam))
                         {
                         case IDOK:
                                 left.x  = GetDlgItemInt(hDlg,IDC_L_X,NULL,0);
                                 left.y  = GetDlgItemInt(hDlg,IDC_L_Y,NULL,0);
                                 right.x  = GetDlgItemInt(hDlg,IDC_R_X,NULL,0);
                                 right.y  = GetDlgItemInt(hDlg,IDC_R_Y,NULL,0);
                                 height  = GetDlgItemInt(hDlg,IDC_HEIGHT,NULL,0);
                                 width  = GetDlgItemInt(hDlg,IDC_WIDTH,NULL,0);
                                 EndDialog(hDlg,TRUE);
                                 return TRUE;
                         }
         }
         return 0;
}
TCHAR szString[] = TEXT ("Hello, 千里眼") ;

LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{        
          static                HINSTANCE        hInstance;
          static                count  = 0;
         
          static                flag = 0;
          HDC                hdc_me,hdc;//依次为窗口设备描述表,桌面DC
         
          PAINTSTRUCT ps ;
          HWND                desk_hwnd = GetDesktopWindow();
          switch (message)
          {        
                   case WM_CREATE:
                          left.x  = 8;
                          left.y  = 192;
                          right.x  = 517;
                          right.y  = 192;
                          cxSize = GetSystemMetrics(SM_CXSCREEN);
                          cySize = GetSystemMetrics(SM_CYSCREEN);
                          width = cxSize/2;
                          height = cySize;
                        
                           hInstance = ((LPCREATESTRUCT)lParam)->hInstance;
                          RegisterHotKey(hwnd,100,0,VK_F4);
                          SetWindowPos(hwnd,HWND_TOPMOST,
                                         0,0,0,0,SWP_NOMOVE|SWP_NOSIZE);
                         return 0;
                                 
                  case WM_COMMAND:
                                  switch(LOWORD(wParam))
                                  {
                                         case IDM_START:
                                                         if(DialogBox(hInstance,TEXT("SCR_COPY"),hwnd,DlgProc))
                                                                  InvalidateRect(hwnd,NULL,TRUE);
                                                          return 0;
                                         
                                         case IDM_CUT:
                                                         MoveWindow(hwnd,cxSize/2,0,width,height,TRUE);//窗口移到右边
                                                        Sleep(200);//稍等一下
                                                  hdc_me = GetDC(hwnd);
                                                   hdcMem = CreateCompatibleDC(hdc_me);//内存设备描述表
                                                  if(hBitmap)
                                                   {
                                                           DeleteObject(hBitmap);
                                                           hBitmap = NULL;
                                                   }
                                                   hBitmap = CreateCompatibleBitmap(hdc_me,width,height);
                                                   SelectObject(hdcMem,hBitmap);

                                                   hdc = GetDCEx(desk_hwnd,0,DCX_LOCKWINDOWUPDATE);
                                                   pt = left;
                                                   ScreenToClient(hwnd,&pt);                                                         
                                                   //BitBlt(hdc_me,0,pt.y,width,height,
                                                         //                        hdc,left.x,left.y,SRCCOPY);
                                                   BitBlt(hdcMem,0,0,width,height,
                                                                  hdc,left.x,left.y,SRCCOPY);//桌面左边图像放入内存

                                             MoveWindow(hwnd,0,0,width,height,TRUE);//窗口移到右边
                                                 Sleep(200);

                                                         //右边图像放入内存并进行异或操作
                                         BitBlt(hdcMem,0,0,width,height,        
                                                         hdc,right.x,right.y,SRCINVERT);
                                                  BitBlt(hdc_me,0,pt.y,width,height,
                                                         hdcMem,0,0,SRCCOPY);
                                                 // BitBlt(hdc_me,0,0,width,height,
                                                 //                hdcMem,0,0,SRCCOPY);  //程序编写时测试代码
                                                 if(flag)
                                                         KillTimer(hwnd,ID_TIMER);
                                                  flag = 1;
                                                  SetTimer(hwnd,ID_TIMER,50,TimerProc);
                                                  ReleaseDC(hwnd,hdc_me);
                                                  ReleaseDC(desk_hwnd,hdc);
                                                         
                                                         return 0;
                                         case IDM_ABOUT:
                                                 DialogBox(hInstance,TEXT("AboutBox"),hwnd,AboutDlgProc);
                                                 return 0;
                                  }
                       break;
                 case WM_PAINT:
           hdc = BeginPaint (hwnd, &ps) ;
                    
                   TextOut(hdc,50,50,szString,lstrlen(szString));
           EndPaint (hwnd, &ps) ;
           return 0 ;     
                 case WM_HOTKEY:
                                 if(IsWindowVisible(hwnd))
                                         ShowWindow(hwnd,SW_HIDE);
                                 else        
                                         ShowWindow(hwnd,SW_SHOW);
                                         SendMessage(hwnd,WM_COMMAND,IDM_CUT,0);
                                 return 0;
                 case WM_DESTROY:
                           KillTimer(hwnd,ID_TIMER);
                       PostQuitMessage (0) ;
                       return 0 ;
          }
          return DefWindowProc (hwnd, message, wParam, lParam) ;
}

思路:先把窗口移到右边,截取左边的图像,再把窗口已到左边,截取右边的图像,两幅图进行异或操作,找出两幅图不一样的地方。

大家来找茬挂




上一篇:狗尾续貂-OpenGL例程补上
下一篇:这一回学会多媒体指令
16_avatar_middle
最佳答案
0 
在线会员 发表于 2019-5-17 13:21:07 | 显示全部楼层
不知楼主什么意思,很初级,资源文件也没有,还得自己添加,要转也转全点呀。
36_avatar_middle
最佳答案
0 
ico_lz  楼主| 发表于 2019-5-17 13:25:00 | 显示全部楼层
这么垃圾,那删了吧,版主把它删了
16_avatar_middle
最佳答案
0 
在线会员 发表于 2019-5-17 14:58:21 | 显示全部楼层
王者归来339 发表于 2019-5-17 13:25
这么垃圾,那删了吧,版主把它删了

不垃圾呀,很好的入门教程,就是没有资源文件
75_avatar_middle
最佳答案
0 
在线会员 发表于 2019-5-19 18:40:14 | 显示全部楼层
很仔细看了你那程序,那是win32程序,win32那么原始地写就回到解放前了。
还是在控制台给你重写吧。既然没资源,就得自己造,代码多就不要埋怨,没资源就是这样。
代码的核心在OnCutClick(),其它的都是win32的,与应用的逻辑没太大关系。
不要添加rc,已经造出来了。
游戏没什么玩头,就像陪一个小娃娃挖沙,它这堆那堆,铲铲要帮他拿着。
如果不会程序造资源倒可以学习学习,特别是把win32弄成只会做一件事的东东,那我猜想
她每天可能就在用手机砸核桃。心疼的核桃怎么吃,而不是手机多少钱。
//

#include "stdafx.h"
#include <Windows.h>
#define ID_TIMER 1
#define IDC_L_X 1000
#define IDC_L_Y 1001
#define IDC_R_X 1002
#define IDC_R_Y 1003
#define IDC_HEIGHT 1004
#define IDC_WIDTH  1005

#define IDM_START 3001
#define IDM_CUT  3002
#define IDM_QUIT 3003

#define IDM_ABOUT 3100

#define ID_TEXT 4000

namespace  app {
        POINT   left, right;
        int     height, width;
        int     cxSize, cySize;
        HDC     hdcMem;
        HBITMAP hBitmap;
        POINT   pt;

        auto count = 0;
        auto flag = 0;
        HINSTANCE hInstance;
        TCHAR szAppName[] = TEXT("SCR_COPY");
        TCHAR szString[] = TEXT("Hello, 千里眼");
        HWND  hwnd;
        int iCmdShow = SW_SHOW;
        LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
        void CALLBACK TimerProc(HWND hwnd, UINT message, UINT iTimerID, DWORD dwTime);
        LRESULT CALLBACK HandleWmCreate(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam);
        LRESULT CALLBACK HandleWmCommand(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam);
        LRESULT CALLBACK HandleWmPaint(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam);
        LRESULT CALLBACK HandleWmHotkey(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam);

        BOOL CALLBACK AboutDlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);
        BOOL CALLBACK CfgDlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);

        LRESULT OnStartClick();
        LRESULT OnCutClick();
        LRESULT OnAboutClick();

        void InitDlg(HWND hDlg);
        void OnDlgOk(HWND hDlg);

        void aboutdlg();
        void cfgdlg();

        LPWORD lpwAlign(LPWORD lpIn, ULONG dw2Power = 4);

};
using namespace app;
int main()
{
        MSG   msg;
        WNDCLASS wndclass;
        wndclass.style = CS_HREDRAW | CS_VREDRAW;
        wndclass.lpfnWndProc = WndProc;
        wndclass.cbClsExtra = 0;
        wndclass.cbWndExtra = 0;
        wndclass.hInstance = hInstance;
        wndclass.hIcon = LoadIcon(hInstance, szAppName);
        wndclass.hCursor = LoadCursor(NULL, IDC_ARROW);
        wndclass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
        wndclass.lpszMenuName = NULL;
        wndclass.lpszClassName = szAppName;
        RegisterClass(&wndclass);
        hwnd = CreateWindow(szAppName, TEXT("SCR_COPY"), WS_OVERLAPPEDWINDOW,
                          CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
                          NULL, NULL, hInstance, NULL);
        ShowWindow(hwnd, iCmdShow);
        UpdateWindow(hwnd);
        while (GetMessage(&msg, NULL, 0, 0))
        {
                if (!IsDialogMessage(NULL, &msg))
                {
                        TranslateMessage(&msg);
                        DispatchMessage(&msg);
                }
        }
        return msg.wParam;
}
//定时器函数
void CALLBACK app::TimerProc(HWND hwnd, UINT message, UINT iTimerID, DWORD dwTime)
{
        if (iTimerID == ID_TIMER)
        {
                HDC hdc_me = GetDC(hwnd);
                POINT pos, pos2;
                HBRUSH hBrush;
                //拷贝内存到窗口
                BitBlt(hdc_me, 0, pt.y, width, height, hdcMem, 0, 0, SRCCOPY);
                hBrush = CreateSolidBrush(RGB(255, 100, 255));
                SelectObject(hdc_me, hBrush);
                GetCursorPos(&pos);
                pos2 = pos;
                ScreenToClient(hwnd, &pos2);
                //根据鼠标位置,在窗口上画一个球
                Ellipse(hdc_me, pos.x - cxSize / 2 - 5, pos2.y - 5, pos.x - cxSize / 2 + 5, pos2.y + 5);
                DeleteObject(hBrush);
                ReleaseDC(hwnd, hdc_me);
        }
}
LRESULT CALLBACK app::WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
        switch (message)
        {
        case WM_CREATE:return HandleWmCreate(hwnd, message, wParam, lParam);
        case WM_COMMAND:return HandleWmCommand(hwnd, message, wParam, lParam);
        case WM_PAINT:return HandleWmPaint(hwnd, message, wParam, lParam);
        case WM_HOTKEY:return HandleWmHotkey(hwnd, message, wParam, lParam);
        case WM_DESTROY:KillTimer(hwnd, ID_TIMER);PostQuitMessage(0);return 0;
        }
        return DefWindowProc(hwnd, message, wParam, lParam);
}
LRESULT CALLBACK app::HandleWmCreate(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) {
        left.x = 8;
        left.y = 192;
        right.x = 517;
        right.y = 192;
        cxSize = GetSystemMetrics(SM_CXSCREEN);
        cySize = GetSystemMetrics(SM_CYSCREEN);
        width = cxSize / 2;
        height = cySize;
        hInstance = ((LPCREATESTRUCT)lParam)->hInstance;
        RegisterHotKey(hwnd, 100, 0, VK_F4);
        //SetWindowPos(hwnd, HWND_TOPMOST,0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);

        HMENU hMenu = GetMenu(hwnd);
        if (!hMenu) hMenu = CreateMenu();
        HMENU hGameMenu = CreateMenu();
        HMENU hHelpMenu = CreateMenu();
        AppendMenu(hMenu, MF_POPUP, (LONG)hGameMenu, TEXT("游戏(G)"));
        AppendMenu(hGameMenu, MF_STRING, IDM_START, TEXT("开始"));
        AppendMenu(hGameMenu, MF_STRING, IDM_CUT, TEXT("剪切"));
        AppendMenu(hMenu, MF_SEPARATOR, 0, 0);
        AppendMenu(hGameMenu, MF_STRING, IDM_QUIT, TEXT("退出"));

        AppendMenu(hMenu, MF_POPUP, (LONG)hHelpMenu, TEXT("帮助"));
        AppendMenu(hHelpMenu, MF_STRING, IDM_ABOUT, TEXT("关于"));
        SetMenu(hwnd, hMenu);

        return 0;
}
LRESULT CALLBACK app::HandleWmCommand(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) {
        switch (LOWORD(wParam))
        {
        case IDM_START:return OnStartClick();
        case IDM_CUT:return OnCutClick();
        case IDM_ABOUT: return OnAboutClick();
        case IDM_QUIT:SendMessage(hwnd, WM_CLOSE, 0, 0);break;
        }
        return 0;
}
LRESULT CALLBACK app::HandleWmPaint(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) {
        PAINTSTRUCT ps;
        HDC hdc = BeginPaint(hwnd, &ps);
        SelectObject(hdc, GetStockObject(DEFAULT_GUI_FONT));
        TextOut(hdc, 50, 50, szString, lstrlen(szString));
        EndPaint(hwnd, &ps);
        return 0;
}
LRESULT CALLBACK app::HandleWmHotkey(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) {
        if (IsWindowVisible(hwnd)) ShowWindow(hwnd, SW_HIDE);
        else ShowWindow(hwnd, SW_SHOW);
        SendMessage(hwnd, WM_COMMAND, IDM_CUT, 0);
        return 0;
}
LRESULT app::OnStartClick() {
        cfgdlg();
        //if (DialogBox(hInstance, TEXT("SCR_COPY"), hwnd, DlgProc))
        InvalidateRect(hwnd, NULL, TRUE);
        return 0;
}
LRESULT app::OnCutClick() {
        MoveWindow(hwnd, cxSize / 2, 0, width, height, TRUE);
        Sleep(200);
        //建兼容内存设备
        HDC hdc_me = GetDC(hwnd);
        //存在则释放重建
        if (hdcMem) {
                SelectObject(hdcMem, NULL);
                DeleteDC(hdcMem);
        }
        hdcMem = CreateCompatibleDC(hdc_me);
        if (hBitmap)
        {
                DeleteObject(hBitmap);
                hBitmap = NULL;
        }
        hBitmap = CreateCompatibleBitmap(hdc_me, width, height);
        SelectObject(hdcMem, hBitmap);
        //获取桌面设备
        HWND   desk_hwnd = GetDesktopWindow();
        HDC hdc = GetDCEx(desk_hwnd, 0, DCX_LOCKWINDOWUPDATE);
        pt = left;
        ScreenToClient(hwnd, &pt);
        //BitBlt(hdc_me,0,pt.y,width,height,hdc,left.x,left.y,SRCCOPY);
    //按配置参数位置,把指定左起点桌面拷入内存
        BitBlt(hdcMem, 0, 0, width, height,        hdc, left.x, left.y, SRCCOPY);
        //将窗口缩放与拷贝区重叠。这么折腾,大概意思就是不让下次拷贝把窗口也拷进去了
        MoveWindow(hwnd, 0, 0, width, height, TRUE);//窗口移到右边
        Sleep(200);

        //把指定右桌面取反后拷入内存叠加
        BitBlt(hdcMem, 0, 0, width, height,        hdc, right.x, right.y, SRCINVERT);
        //最后再把结果,内存拷入窗口
        BitBlt(hdc_me, 0, pt.y, width, height,hdcMem, 0, 0, SRCCOPY);
        // BitBlt(hdc_me,0,0,width,height,
        //                hdcMem,0,0,SRCCOPY);  //程序编写时测试代码
        //重置定时器
        if (flag)        KillTimer(hwnd, ID_TIMER);
        flag = 1;
        SetTimer(hwnd, ID_TIMER, 50, TimerProc);

        ReleaseDC(hwnd, hdc_me);
        ReleaseDC(desk_hwnd, hdc);

        return 0;
}

LRESULT app::OnAboutClick() {
        //DialogBox(hInstance, TEXT("AboutBox"), hwnd, AboutDlgProc);
        aboutdlg();
        return 0;
}

///////////////////////////////////////////////////////////////////
void app::InitDlg(HWND hDlg) {
        SetDlgItemInt(hDlg, IDC_L_X, left.x, 0);
        SetDlgItemInt(hDlg, IDC_L_Y, left.y, 0);
        SetDlgItemInt(hDlg, IDC_R_X, right.x, 0);
        SetDlgItemInt(hDlg, IDC_R_Y, right.y, 0);
        SetDlgItemInt(hDlg, IDC_HEIGHT, height, 0);
        SetDlgItemInt(hDlg, IDC_WIDTH, width, 0);
}
void app::OnDlgOk(HWND hDlg) {
        left.x  = GetDlgItemInt(hDlg, IDC_L_X, NULL, 0);
        left.y  = GetDlgItemInt(hDlg, IDC_L_Y, NULL, 0);
        right.x = GetDlgItemInt(hDlg, IDC_R_X, NULL, 0);
        right.y = GetDlgItemInt(hDlg, IDC_R_Y, NULL, 0);
        height  = GetDlgItemInt(hDlg, IDC_HEIGHT, NULL, 0);
        width   = GetDlgItemInt(hDlg, IDC_WIDTH, NULL, 0);
}
LPWORD app::lpwAlign(LPWORD lpIn, ULONG dw2Power)
{
        ULONG ul;
        ul = (ULONG)lpIn;
        ul += dw2Power - 1;
        ul &= ~(dw2Power - 1);
        return (LPWORD)ul;
}
void app::cfgdlg() {

        HGLOBAL hgbl;
        LPDLGTEMPLATE lpdt;
        LPDLGITEMTEMPLATE lpdit;
        LPWORD lpw;
        LPWSTR lpwsz;
        int nchar;
        hgbl = GlobalAlloc(GMEM_ZEROINIT, 1024);
        if (!hgbl)        return;
        lpdt = (LPDLGTEMPLATE)GlobalLock(hgbl);
        //  定义对话框.
        lpdt->style = WS_POPUP | WS_BORDER | WS_SYSMENU | DS_MODALFRAME | DS_SETFONT | WS_CAPTION;
        lpdt->cdit = 13;     // 控件数
        lpdt->x = 10;        lpdt->y = 10;        lpdt->cx = 400;        lpdt->cy = 150;
        //字
        lpw = (LPWORD)(lpdt + 1);
        *lpw++ = 0;            // 无菜单
        *lpw++ = 0;            // 预定义对话框类(默认值)
                                                   //
        lpwsz = (LPWSTR)lpw;
        nchar = MultiByteToWideChar(CP_ACP, 0, "参数", -1, lpwsz, 50);
        lpw += nchar;
        //
        lpwsz = (LPWSTR)(LPWORD)(lpw + 1);
        nchar = MultiByteToWideChar(CP_ACP, 0, "Arial", -1, lpwsz, 30);
        lpw += nchar;
        *lpw++ = 0;
        //  OK 按钮
        lpw = lpwAlign(lpw);   // 分配 DLGITEMTEMPLATE 在 DWORD 边界
        lpdit = (LPDLGITEMTEMPLATE)lpw;
        lpdit->x = 130;        lpdit->y = 100;        lpdit->cx = 80;        lpdit->cy = 20;
        lpdit->id = IDOK;
        lpdit->style = WS_CHILD | WS_VISIBLE | BS_DEFPUSHBUTTON;
        lpw = (LPWORD)(lpdit + 1);
        *lpw++ = 0xFFFF;
        *lpw++ = 0x0080;  // Button 类
        lpwsz = (LPWSTR)lpw;
        nchar = MultiByteToWideChar(CP_ACP, 0, "OK", -1, lpwsz, 50);
        lpw += nchar;
        *lpw++ = 0;   

        //==============================================================
        // IDC_L_X 标签.
        lpw = lpwAlign(lpw);    // 分配 DLGITEMTEMPLATE 在 DWORD 边界
        lpdit = (LPDLGITEMTEMPLATE)lpw;
        lpdit->x = 10;        lpdit->y = 10;        lpdit->cx = 100;        lpdit->cy = 20;
        lpdit->id = ID_TEXT;
        lpdit->style = WS_CHILD | WS_VISIBLE | SS_LEFT ;
        lpw = (LPWORD)(lpdit + 1);
        *lpw++ = 0xFFFF;
        *lpw++ = 0x0082; // label类
        lpwsz = (LPWSTR)lpw;
        nchar = MultiByteToWideChar(CP_ACP, 0, "截取矩形左上X", -1, lpwsz, 150);
        lpw += nchar;
        *lpw++ = 0;   
        // IDC_L_X 编辑框
        lpw = lpwAlign(lpw);    // 分配 DLGITEMTEMPLATE 在 DWORD 边界
        lpdit = (LPDLGITEMTEMPLATE)lpw;
        lpdit->x = 110;        lpdit->y = 10;        lpdit->cx = 40;        lpdit->cy = 20;
        lpdit->id = IDC_L_X;
        lpdit->style = WS_CHILD | WS_VISIBLE | SS_LEFT | WS_BORDER;
        lpw = (LPWORD)(lpdit + 1);
        *lpw++ = 0xFFFF;
        *lpw++ = 0x0081; // edit类
        lpwsz = (LPWSTR)lpw;
        nchar = MultiByteToWideChar(CP_ACP, 0, "0", -1, lpwsz, 150);
        lpw += nchar;
        *lpw++ = 0;
       
        //=============================================================
        // IDC_L_Y标签
        lpw = lpwAlign(lpw);    // 分配 DLGITEMTEMPLATE 在 DWORD 边界
        lpdit = (LPDLGITEMTEMPLATE)lpw;
        lpdit->x = 200,        lpdit->y = 10,        lpdit->cx = 100,        lpdit->cy = 20;
        lpdit->id = ID_TEXT;
        lpdit->style = WS_CHILD | WS_VISIBLE | SS_LEFT ;
        lpw = (LPWORD)(lpdit + 1);
        *lpw++ = 0xFFFF;
        *lpw++ = 0x0082; // label类
        lpwsz = (LPWSTR)lpw;
        nchar = MultiByteToWideChar(CP_ACP, 0, "截取矩形左上Y", -1, lpwsz, 150);
        lpw += nchar;
        *lpw++ = 0;   
        // IDC_L_Y 编辑框
        lpw = lpwAlign(lpw);    // 分配 DLGITEMTEMPLATE 在 DWORD 边界
        lpdit = (LPDLGITEMTEMPLATE)lpw;
        lpdit->x = 300;        lpdit->y = 10;        lpdit->cx = 40;        lpdit->cy = 20;
        lpdit->id = IDC_L_Y;
        lpdit->style = WS_CHILD | WS_VISIBLE | SS_LEFT | WS_BORDER;
        lpw = (LPWORD)(lpdit + 1);
        *lpw++ = 0xFFFF;
        *lpw++ = 0x0081; // edit类
        lpwsz = (LPWSTR)lpw;
        nchar = MultiByteToWideChar(CP_ACP, 0, "0", -1, lpwsz, 150);
        lpw += nchar;
        *lpw++ = 0;     // No creation data

        //=============================================================
        // IDC_R_X标签
        lpw = lpwAlign(lpw);    // 分配 DLGITEMTEMPLATE 在 DWORD 边界
        lpdit = (LPDLGITEMTEMPLATE)lpw;
        lpdit->x = 10;        lpdit->y = 30;        lpdit->cx = 100;        lpdit->cy = 20;
        lpdit->id = ID_TEXT;
        lpdit->style = WS_CHILD | WS_VISIBLE | SS_LEFT ;
        lpw = (LPWORD)(lpdit + 1);
        *lpw++ = 0xFFFF;
        *lpw++ = 0x0082; // label类
        lpwsz = (LPWSTR)lpw;
        nchar = MultiByteToWideChar(CP_ACP, 0, "截取矩形右下X", -1, lpwsz, 150);
        lpw += nchar;
        *lpw++ = 0;
        // IDC_R_Y 编辑框
        lpw = lpwAlign(lpw);    // 分配 DLGITEMTEMPLATE 在 DWORD 边界
        lpdit = (LPDLGITEMTEMPLATE)lpw;
        lpdit->x = 110, lpdit->y = 30, lpdit->cx = 40, lpdit->cy = 20;
        lpdit->id = IDC_R_X;
        lpdit->style = WS_CHILD | WS_VISIBLE | SS_LEFT | WS_BORDER;
        lpw = (LPWORD)(lpdit + 1);
        *lpw++ = 0xFFFF;
        *lpw++ = 0x0081; // edit类
        lpwsz = (LPWSTR)lpw;
        nchar = MultiByteToWideChar(CP_ACP, 0, "0", -1, lpwsz, 150);
        lpw += nchar;
        *lpw++ = 0;     // No creation data

        //=============================================================
        // IDC_R_Y标签
        lpw = lpwAlign(lpw);    // 分配 DLGITEMTEMPLATE 在 DWORD 边界
        lpdit = (LPDLGITEMTEMPLATE)lpw;
        lpdit->x = 200;        lpdit->y = 30;        lpdit->cx = 100;lpdit->cy = 20;
        lpdit->id = ID_TEXT;
        lpdit->style = WS_CHILD | WS_VISIBLE | SS_LEFT;
        lpw = (LPWORD)(lpdit + 1);
        *lpw++ = 0xFFFF;
        *lpw++ = 0x0082; // label类
        lpwsz = (LPWSTR)lpw;
        nchar = MultiByteToWideChar(CP_ACP, 0, "截取矩形右下Y", -1, lpwsz, 150);
        lpw += nchar;
        *lpw++ = 0;
        // IDC_R_Y 编辑框
        lpw = lpwAlign(lpw);    // 分配 DLGITEMTEMPLATE 在 DWORD 边界
        lpdit = (LPDLGITEMTEMPLATE)lpw;
        lpdit->x = 300;        lpdit->y = 30;        lpdit->cx = 40;        lpdit->cy = 20;
        lpdit->id = IDC_R_Y;
        lpdit->style = WS_CHILD | WS_VISIBLE | SS_LEFT | WS_BORDER;
        lpw = (LPWORD)(lpdit + 1);
        *lpw++ = 0xFFFF;
        *lpw++ = 0x0081; // edit类
        lpwsz = (LPWSTR)lpw;
        nchar = MultiByteToWideChar(CP_ACP, 0, "0", -1, lpwsz, 150);
        lpw += nchar;
        *lpw++ = 0;     // No creation data
        //=============================================================
        // IDC_HEIGHT标签
        lpw = lpwAlign(lpw);    // 分配 DLGITEMTEMPLATE 在 DWORD 边界
        lpdit = (LPDLGITEMTEMPLATE)lpw;
        lpdit->x = 10;        lpdit->y = 50;        lpdit->cx = 100;        lpdit->cy = 20;
        lpdit->id = ID_TEXT;
        lpdit->style = WS_CHILD | WS_VISIBLE | SS_LEFT ;
        lpw = (LPWORD)(lpdit + 1);
        *lpw++ = 0xFFFF;
        *lpw++ = 0x0082; // label类
        lpwsz = (LPWSTR)lpw;
        nchar = MultiByteToWideChar(CP_ACP, 0, "截取矩形高度", -1, lpwsz, 150);
        lpw += nchar;
        *lpw++ = 0;
        // IDC_HEIGHT 编辑框
        lpw = lpwAlign(lpw);    // 分配 DLGITEMTEMPLATE 在 DWORD 边界
        lpdit = (LPDLGITEMTEMPLATE)lpw;
        lpdit->x = 110;        lpdit->y = 50;        lpdit->cx = 40;        lpdit->cy = 20;
        lpdit->id = IDC_HEIGHT;
        lpdit->style = WS_CHILD | WS_VISIBLE | SS_LEFT | WS_BORDER;
        lpw = (LPWORD)(lpdit + 1);
        *lpw++ = 0xFFFF;
        *lpw++ = 0x0081; // edit类
        lpwsz = (LPWSTR)lpw;
        nchar = MultiByteToWideChar(CP_ACP, 0, "0", -1, lpwsz, 150);
        lpw += nchar;
        *lpw++ = 0;     // No creation data

        //=============================================================
        // IDC_WIDTH标签
        lpw = lpwAlign(lpw);    // 分配 DLGITEMTEMPLATE 在 DWORD 边界
        lpdit = (LPDLGITEMTEMPLATE)lpw;
        lpdit->x = 200;        lpdit->y = 50;        lpdit->cx = 100;        lpdit->cy = 20;
        lpdit->id = ID_TEXT;
        lpdit->style = WS_CHILD | WS_VISIBLE | SS_LEFT ;
        lpw = (LPWORD)(lpdit + 1);
        *lpw++ = 0xFFFF;
        *lpw++ = 0x0082; // label类
        lpwsz = (LPWSTR)lpw;
        nchar = MultiByteToWideChar(CP_ACP, 0, "截取矩形宽度", -1, lpwsz, 150);
        lpw += nchar;
        *lpw++ = 0;
        // IDC_R_Y 编辑框
        lpw = lpwAlign(lpw);    // 分配 DLGITEMTEMPLATE 在 DWORD 边界
        lpdit = (LPDLGITEMTEMPLATE)lpw;
        lpdit->x = 300;        lpdit->y = 50;        lpdit->cx = 40;        lpdit->cy = 20;
        lpdit->id = IDC_WIDTH;
        lpdit->style = WS_CHILD | WS_VISIBLE | SS_LEFT | WS_BORDER;
        lpw = (LPWORD)(lpdit + 1);
        *lpw++ = 0xFFFF;
        *lpw++ = 0x0081; // edit类
        lpwsz = (LPWSTR)lpw;
        nchar = MultiByteToWideChar(CP_ACP, 0, "0", -1, lpwsz, 150);
        lpw += nchar;
        *lpw++ = 0;   

        GlobalUnlock(hgbl);
        HRESULT ret = DialogBoxIndirect(
                GetModuleHandle(NULL),
                (LPDLGTEMPLATE)hgbl,
                NULL,
                (DLGPROC)CfgDlgProc);

        GlobalFree(hgbl);

}

void app::aboutdlg() {
        HGLOBAL hgbl;
        LPDLGTEMPLATE lpdt;
        LPDLGITEMTEMPLATE lpdit;
        LPWORD lpw;
        LPWSTR lpwsz;
        int nchar;
        hgbl = GlobalAlloc(GMEM_ZEROINIT, 1024);
        if (!hgbl)        return ;
        lpdt = (LPDLGTEMPLATE)GlobalLock(hgbl);
        //  定义对话框.
        lpdt->style = WS_POPUP | WS_BORDER | WS_SYSMENU | DS_MODALFRAME | DS_SETFONT | WS_CAPTION;
        lpdt->cdit =2;   
        lpdt->x = 10;
        lpdt->y = 10;
        lpdt->cx = 200;
        lpdt->cy = 100;
        lpw = (LPWORD)(lpdt + 1);
        *lpw++ = 0;         
        *lpw++ = 0;   
        lpwsz = (LPWSTR)lpw;
        nchar = MultiByteToWideChar(CP_ACP, 0, "关于", -1, lpwsz, 50);
        lpw += nchar;
        lpwsz = (LPWSTR)(LPWORD)(lpw + 1);
        nchar = MultiByteToWideChar(CP_ACP, 0, "Arial", -1, lpwsz, 30);
        lpw += nchar;
        *lpw++ = 0;
        //-----------------------
        // 定义 OK 按钮
        //-----------------------
        lpw = lpwAlign(lpw); // 分配 DLGITEMTEMPLATE 在 DWORD 边界
        lpdit = (LPDLGITEMTEMPLATE)lpw;
        lpdit->x = 100;
        lpdit->y = 60;
        lpdit->cx = 30;
        lpdit->cy = 16;
        lpdit->id = IDOK;
        lpdit->style = WS_CHILD | WS_VISIBLE | BS_DEFPUSHBUTTON;
        lpw = (LPWORD)(lpdit + 1);
        *lpw++ = 0xFFFF;
        *lpw++ = 0x0080;// Button 类

        lpwsz = (LPWSTR)lpw;
        nchar = MultiByteToWideChar(CP_ACP, 0, "OK", -1, lpwsz, 50);
        lpw += nchar;
        *lpw++ = 0;

        ////-----------------------
        //// 定义静态文本控件.
        ////-----------------------
        lpw = lpwAlign(lpw);  // 分配 DLGITEMTEMPLATE 在 DWORD 边界
        lpdit = (LPDLGITEMTEMPLATE)lpw;
        lpdit->x = 10;
        lpdit->y = 10;
        lpdit->cx = 160;
        lpdit->cy = 20;
        lpdit->id = ID_TEXT;
        lpdit->style = WS_CHILD | WS_VISIBLE | SS_LEFT;
        lpw = (LPWORD)(lpdit + 1);
        *lpw++ = 0xFFFF;
        *lpw++ = 0x0082; // STATIC类

        lpwsz = (LPWSTR)lpw;
        nchar = MultiByteToWideChar(CP_ACP, 0, "欢迎来到Win32世界 !!!", -1, lpwsz,50);
        lpw += nchar;
        *lpw++ = 0;   

        GlobalUnlock(hgbl);
        INT_PTR ret= DialogBoxIndirect(
                GetModuleHandle(NULL),
                (LPDLGTEMPLATE)hgbl,
                NULL,
                (DLGPROC)AboutDlgProc);
        GlobalFree(hgbl);

}
BOOL CALLBACK app::CfgDlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
        switch (message)
        {
        case WM_INITDIALOG:InitDlg(hDlg);return TRUE;
        case WM_CLOSE:EndDialog(hDlg, FALSE);return 0;
        case WM_COMMAND:
                if (LOWORD(wParam) == IDOK) {
                        OnDlgOk(hDlg);
                        EndDialog(hDlg, TRUE);
                        return TRUE;
                }
                break;
        }
        return 0;
}
BOOL CALLBACK app::AboutDlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
        switch (message)
        {
        case WM_INITDIALOG:        return TRUE;
        case WM_CLOSE:EndDialog(hDlg, FALSE);return 0;
        case WM_COMMAND:
                switch (LOWORD(wParam))
                {
                case IDOK:EndDialog(hDlg, 0);
                        return TRUE;
                }
                break;
        }
        return FALSE;
}



大家来找茬挂




您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

×【发帖 友情提示】
1、请回复有意义的内容,请勿恶意灌水;
2、纯数字、字母、表情等无意义的内容系统将自动删除;
3、若正常回复后帖子被自动删除,为系统误删的情况,请重新回复其他正常内容或等待管理员审核通过后会自动发布;
4、感谢您对VC驿站一如既往的支持,谢谢合作!

关闭

站长提醒上一条 /2 下一条

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号 )|网站地图wx_jqr

GMT+8, 2020-11-28 07:14

Powered by CcTry.CoM

© 2009-2020 cctry.com

快速回复 返回顶部 返回列表