第七章 滑鼠(CHECKER3)

来源:https://www.cnblogs.com/web1013/archive/2018/05/09/9015368.html
-Advertisement-
Play Games

1 /* 2 CHECKER3.C -- Mouse Hit-Test Demo Program No.3 3 (c) Charles Petzold, 1998 4 */ 5 6 #include <Windows.h> 7 8 #define DIVISIONS 5 9 10 LRESULT C ...


  1 /*---------------------------------------------
  2 CHECKER3.C -- Mouse Hit-Test Demo Program No.3
  3               (c) Charles Petzold, 1998
  4 ---------------------------------------------*/
  5 
  6 #include <Windows.h>
  7 
  8 #define DIVISIONS 5
  9 
 10 LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
 11 LRESULT CALLBACK ChildWndProc(HWND, UINT, WPARAM, LPARAM);
 12 
 13 TCHAR szChildClass[] = TEXT("Checker3_Child");
 14 
 15 int WINAPI WinMain( __in HINSTANCE hInstance
 16                     , __in_opt HINSTANCE hPrevInstance
 17                     , __in LPSTR lpCmdLine
 18                     , __in int nShowCmd )
 19 {
 20     static TCHAR szAppName[] = TEXT("Checker3");
 21     HWND hwnd;
 22     MSG msg;
 23     WNDCLASS wndclass;
 24 
 25     wndclass.style = CS_HREDRAW | CS_VREDRAW;
 26     wndclass.lpfnWndProc = WndProc;
 27     wndclass.cbClsExtra = 0;
 28     wndclass.cbWndExtra = 0;
 29     wndclass.hInstance = hInstance;
 30     wndclass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
 31     wndclass.hCursor = LoadCursor(NULL, IDC_ARROW);
 32     wndclass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
 33     wndclass.lpszMenuName = NULL;
 34     wndclass.lpszClassName = szAppName;
 35 
 36     if (!RegisterClass(&wndclass))
 37     {
 38         MessageBox(NULL, TEXT("Program requires Windows NT!")
 39             , szAppName, MB_ICONERROR);
 40         return 0;
 41     }
 42 
 43     wndclass.lpfnWndProc = ChildWndProc;
 44     wndclass.cbWndExtra = sizeof(long);
 45     wndclass.hIcon = NULL;
 46     wndclass.lpszClassName = szChildClass;
 47 
 48     RegisterClass(&wndclass);
 49 
 50     hwnd = CreateWindow(szAppName, TEXT("Checker3 Mouse Hit-Test Demo")
 51         , WS_OVERLAPPEDWINDOW
 52         , CW_USEDEFAULT, CW_USEDEFAULT
 53         , CW_USEDEFAULT, CW_USEDEFAULT
 54         , NULL, NULL, hInstance, NULL);
 55 
 56     ShowWindow(hwnd, nShowCmd);
 57     UpdateWindow(hwnd);
 58 
 59     while (GetMessage(&msg, NULL, 0, 0))
 60     {
 61         TranslateMessage(&msg);
 62         DispatchMessage(&msg);
 63     }
 64 
 65     return msg.wParam;
 66 }
 67 
 68 LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
 69 {
 70     static HWND hwndChild[DIVISIONS][DIVISIONS];
 71     int cxBlock, cyBlock, x, y;
 72 
 73     switch (message)
 74     {
 75     case WM_CREATE:
 76         for (x = 0; x != DIVISIONS; ++x)
 77             for (y = 0; y != DIVISIONS; ++y)
 78             {
 79                 hwndChild[x][y] = CreateWindow(szChildClass, NULL
 80                     , WS_CHILDWINDOW | WS_VISIBLE
 81                     , 0, 0, 0, 0
 82                     , hwnd, (HMENU)(y << 8 | x)
 83                     , (HINSTANCE)GetWindowLong(hwnd, GWL_HINSTANCE)
 84                     , NULL);
 85             }
 86         return 0;
 87 
 88     case WM_SIZE:
 89         cxBlock = LOWORD(lParam) / DIVISIONS;
 90         cyBlock = HIWORD(lParam) / DIVISIONS;
 91 
 92         for (x = 0; x != DIVISIONS; ++x)
 93             for(y = 0; y != DIVISIONS; ++y)
 94             {
 95                 MoveWindow(hwndChild[x][y]
 96                     , x * cxBlock, y * cyBlock
 97                     , cxBlock, cyBlock, TRUE);
 98             }
 99         return 0;
100 
101     case WM_LBUTTONDOWN:
102         MessageBeep(0);
103         return 0;
104 
105     case WM_DESTROY:
106         PostQuitMessage(0);
107         return 0;
108     }
109 
110     return DefWindowProc(hwnd, message, wParam, lParam);
111 }
112 
113 LRESULT CALLBACK ChildWndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
114 {
115     HDC hdc;
116     PAINTSTRUCT ps;
117     RECT rect;
118 
119     switch (message)
120     {
121     case WM_CREATE:
122         SetWindowLong(hwnd, 0, 0);    // on/off flag
123         return 0;
124 
125     case WM_LBUTTONDOWN:
126         SetWindowLong(hwnd, 0, 1 ^ GetWindowLong(hwnd, 0));
127         InvalidateRect(hwnd, NULL, FALSE);
128         return 0;
129 
130     case WM_PAINT:
131         hdc = BeginPaint(hwnd, &ps);
132 
133         GetClientRect(hwnd, &rect);
134         Rectangle(hdc, 0, 0, rect.right, rect.bottom);
135 
136         if (GetWindowLong(hwnd, 0))
137         {
138             MoveToEx(hdc, 0, 0, NULL);
139             LineTo(hdc, rect.right, rect.bottom);
140             MoveToEx(hdc, 0, rect.bottom, NULL);
141             LineTo(hdc, rect.right, 0);
142         }
143 
144         EndPaint(hwnd, &ps);
145         return 0;
146     }
147 
148     return DefWindowProc(hwnd, message, wParam, lParam);
149 }
CHECKER3.C

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Kali自帶Wireshark,但一般的Linux系統是不帶的,需要自行下載,並且過程略複雜 而純字元界面的Linux系統無法使用Wireshark 但是,所有Linux系統都會安裝TCPDUMP:一種基於命令行的抓包工具 註意事項:預設只抓68位元組,能夠獲得基本信息,但無法做到完整分析 1:開始抓 ...
  • 1 /* 2 CHECKER4.C -- Mouse Hit-Test Demo Program No.4 3 (c) Charles Petzold, 1998 4 */ 5 6 #include <Windows.h> 7 8 #define DIVISIONS 5 9 10 LRESULT C ...
  • 安裝JDK 1. 更新apt-get: $ sudo apt-get update 2. 安裝jdk: $ sudo apt-get install openjdk-8-jdk 部分eclipse現只支持jdk8,且安裝jdk9會有error,詳見: https://askubuntu.com/qu ...
  • 1. 什麼是PXE PXE(Pre-boot Execution Environment,預啟動執行環境)是由Intel公司開發的最新技術,工作於Client/Server的網路模式,支持工作站通過網路從遠端伺服器下載映像,並由此支持通過網路啟動操作系統,在啟動過程中,終端要求伺服器分配IP地址,再 ...
  • 文章鏈接:https://blog.csdn.net/qq_38646470/article/details/80159630 ...
  • chmod命令用來改變文件或者目錄的許可權,只有文件的屬主和超級用戶才能夠執行這個命令 格式: chmod [option] [mode] [file] >常用參數選項 -R : 遞歸修改目錄以及子目錄下麵的所有文件許可權 >模式有兩種格式,一種採用字母方式的表達式,另外一種是數字 1,首先需要瞭解文件 ...
  • 一、前期工作准備 電腦虛擬化開啟(必要工作)大致流程: a.電腦開機時長按F12(F10)進入BIOS界面; b.依次選擇Configuratio > Intel Virtual Technology > Enabled; c.F10保存BIOS設置,再次重啟電腦。 二、安裝包准備 VirtualB ...
  • 參看代碼 GitHub: redis.txt 一、Linux (DeepinOS) 環境 二、Windows 環境 蒙 2018-05-09 22:31 周三 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...