低调的菜鸡 发表于 2019-12-5 11:41

一个有趣的小程序(点不到的按钮)

很早之前在其他地方看到的,觉得特有意思,刚好自己在复习WINDOWS SDK,就手写了一下子
运行界面如下图,很简单的一个小程序,喜欢的就拿走吧,欢迎研究


程序源码如下:
#include <stdio.h>
#include <stdlib.h>
#include <Windows.h>
#include <time.h>
#include <tchar.h>

HINSTANCE g_hInstance = 0;

LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);

int WINAPI WinMain(
        HINSTANCE hInstance,
        HINSTANCE hPreInstance,
        LPSTR lpCmdLine,
        int nShowCmd
)
{
        g_hInstance = hInstance;

        srand((unsigned)time(NULL));

        //1.注册窗口类
        WNDCLASS wc = { 0 };
        wc.lpszClassName = _T("MyClass");
        wc.lpfnWndProc = WndProc;
        wc.hbrBackground = GetSysColorBrush(COLOR_WINDOW);

        RegisterClass(&wc);

        //2.创建窗口
        HWND hWnd = CreateWindow(
                wc.lpszClassName,
                _T("顽皮的按钮"),
                WS_OVERLAPPEDWINDOW,
                200, 100,
                640, 480,
                NULL,
                NULL,
                g_hInstance,
                0
        );

        //3.更新显示窗口
        UpdateWindow(hWnd);
        ShowWindow(hWnd, SW_SHOW);

        //4.消息循环
        MSG Msg = { 0 };
        while (GetMessage(&Msg, 0, 0, 0))
        {
                TranslateMessage(&Msg);
                DispatchMessage(&Msg);
        }
        return (int)Msg.lParam;
}
LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
        static int nCnt = 0;
        switch (uMsg)
        {
        case WM_CREATE:
        {
                HWND hButton = CreateWindow(
                        _T("button"),
                        _T("来点我"),
                        WS_CHILD | WS_VISIBLE,
                        10, 10,
                        80, 45,
                        hWnd,
                        HMENU(0x1000),
                        g_hInstance,
                        0
                );
        }break;
        case WM_COMMAND:
        {
                DWORD nCode = HIWORD(wParam);
                DWORD nId = LOWORD(wParam);
                if (nId == 0x1000 && nCode == BN_CLICKED)
                {
                        if (nCnt == 10)
                        {
                                MessageBox(hWnd, _T("恭喜你点到了!"), _T("嘿嘿"), MB_OK);
                                PostMessage(hWnd, WM_CLOSE, 0, 0);
                        }
                        HWND hButton1 = GetDlgItem(hWnd, 0x1000);
                        int x = rand() % 520;
                        int y = rand() % 390;
                        MoveWindow(hButton1, x, y, 100, 50, true);
                        UpdateWindow(hWnd);
                        nCnt++;
                }
        }break;
        case WM_CLOSE:
                PostQuitMessage(0);
                break;
        }
        return DefWindowProc(hWnd, uMsg, wParam, lParam);
}

编译环境:
vs2017 +win10

低调的菜鸡 发表于 2019-12-5 12:53

附件忘了发了,不好意思

解压密码:www.52pojie.cn

ktzr 发表于 2020-3-25 22:00

把你复制的所有的内容拷贝到一个txt文件,删除项目里的,再把TXT的拷贝进去,重新构建就可应该能解决,
然后这个点不到的按钮至少有2种方法按到:
1按住右键移到按钮上不要移动位置,点击
2拖一个任意窗口(A)遮住按钮一半,从这个A移动鼠标到按钮上,一旦脱离窗口就不要动,直接点击

Vickers2PJ 发表于 2020-3-16 11:19

醉情的大叔 发表于 2020-3-7 00:59
学习了,为啥我运行报错啊,我是VS 2019...因为我缺少什么扩展吗

把_T("顽皮的按钮") 声明成变量再替换试下

sandgarden 发表于 2019-12-5 11:47

能发成品吗 老大

lep52 发表于 2019-12-5 12:14

我能点到,在1楼{:301_997:}

a2204297 发表于 2019-12-5 12:58

这个要考验手速的?

低调的菜鸡 发表于 2019-12-5 12:59

a2204297 发表于 2019-12-5 12:58
这个要考验手速的?

应该不用。

cj13888 发表于 2019-12-5 14:38

学习借鉴一下,谢谢分享

醉情的大叔 发表于 2020-3-7 00:59

学习了,为啥我运行报错啊,我是VS 2019...因为我缺少什么扩展吗

醉情的大叔 发表于 2020-3-24 22:08

Vickers2PJ 发表于 2020-3-16 11:19
把_T("顽皮的按钮") 声明成变量再替换试下

...不好意思,回复晚了,~~我不太会这个声明,百度了也,搞不明白.~~~
页: [1] 2
查看完整版本: 一个有趣的小程序(点不到的按钮)