吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1674|回复: 3
收起左侧

[C&C++ 转载] windows api 按键响应机制

[复制链接]
yuxb57905 发表于 2020-11-25 09:54
本帖最后由 yuxb57905 于 2020-11-26 01:15 编辑

#include <windows.h>
#pragma comment(lib, "winmm.lib")

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

int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,        
                   PSTR szCmdLine, int iCmdShow)      
{      
    static TCHAR szAppName[] = TEXT ("HelloWin") ;      
    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 (NULL, IDI_APPLICATION) ;   
    wndclass.hCursor      = LoadCursor (NULL, IDC_ARROW) ;   
    wndclass.hbrBackground= (HBRUSH) GetStockObject (WHITE_BRUSH) ;      
    wndclass.lpszMenuName  = NULL ;   
    wndclass.lpszClassName = szAppName ;
   
    if (!RegisterClass (&wndclass))      
    {     
            MessageBox (  NULL, TEXT ("This program requires Windows NT!"),      
                                  szAppName, MB_OK) ;
     
            return 0 ;
    }   
    hwnd = CreateWindow( szAppName,      // window class name      
                   TEXT ("The Hello Program"),   // 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 ;      
}
        
LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)        
{   
  /* static*/ WPARAM      hmsg;
    HDC         hdc ;   
    PAINTSTRUCT ps ;     
    RECT        rect ;         
    switch (message)   
    {
                case WM_LBUTTONDOWN:
                         
                         MessageBox (  NULL, TEXT ("一级左键!"),      
                        TEXT ("This program !"), MB_OK) ;
                         //SendMessage(hwnd,WM_RBUTTONDOWN,0,0);
                         return 0 ;
                        // switch(hmsg.message)
                        //{
                         case WM_KEYDOWN:  
                                         hmsg = mymessage(hwnd);
                                         MessageBox (  NULL, TEXT ("This program 二级键UP!"),      
                                                TEXT ("This program !"), MB_ICONERROR) ;
                     switch(hmsg)  
                                         {  
                                            case   VK_HOME:  
                                                           MessageBox (  NULL, TEXT ("This is home键!"),      
                                                                    TEXT ("This program !"), MB_ICONERROR) ;  
                                                           break ;
                                                case   VK_NUMLOCK:  
                                                           MessageBox (  NULL, TEXT ("This is NUMLOCK键!"),      
                                                                                        TEXT ("This program !"), MB_ICONERROR) ;  
                                                       break ;
                                         }
                                         
                           return 0 ;
                                
               
        case WM_RBUTTONDOWN:      
                         MessageBox (  NULL, TEXT ("This program RRRRRR!"),      
                TEXT ("This program !"), MB_ICONERROR) ;
                SendMessage(hwnd,WM_KEYDOWN,0,0);
                SendMessage(hwnd,WM_CHAR,VK_HOME,0);
               
                SendMessage(hwnd,WM_KEYUP,0,0);
          return 0 ;

                case WM_CREATE:      
                         //PlaySound (TEXT ("hellowin.wav"), NULL, SND_FILENAME | SND_ASYNC) ;
                         
                                return 0 ;

                case  WM_PAINT:      
                          hdc = BeginPaint (hwnd, &ps) ;
                          GetClientRect (hwnd, &rect) ;
                          DrawText (hdc, TEXT ("Hello, Windows 98!"), -1, &rect,   
                                           DT_SINGLELINE | DT_CENTER | DT_VCENTER) ;      
                          EndPaint (hwnd, &ps) ;   
                                return 0 ;
   
                case   WM_DESTROY:
                           PostQuitMessage (0) ;      
                                return 0 ;     
        }
       
  return DefWindowProc (hwnd, message, wParam, lParam) ;      
}

WPARAM mymessage(HWND hwnd)
{
    MSG mymsg;
        mymsg.wParam =0;
       
        while(GetMessage (&mymsg, NULL, 0, 0)/*mymsg.wParam<VK_BACK||mymsg.wParam>VK_SCROLL*/)
        {
          
          TranslateMessage (&mymsg) ;
          if (mymsg.message == WM_KEYUP)
          {
         return (mymsg.wParam);
                 break;
          }
          else
         DispatchMessage (&mymsg) ;
        }

        return 0;
}

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

qihang5518 发表于 2020-11-25 10:23
虽然看不懂,依然感谢分享
鸭子咯咯哒~ 发表于 2020-11-25 11:07
mettle 发表于 2020-11-25 18:06
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 23:34

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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