【问题标题】:Didn't print out any letter?没有打印出任何信件?
【发布时间】:2014-01-01 15:32:58
【问题描述】:
#include <stdio.h>
#include <stdlib.h>
#define WINVER 0x0500
#include <windows.h>

/// Glabal Handle
HANDLE StdHandle;

int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
  StdHandle = GetStdHandle(STD_OUTPUT_HANDLE); // Console window
  MSG Msg ;
  while (GetMessage(&Msg, NULL, 0, 0))
  {
    TranslateMessage(&Msg);
    DispatchMessage(&Msg);
  }
  return Msg.wParam ;
}

LRESULT CALLBACK WndProc (HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
  switch (msg)
  {
    case WM_DESTROY:
      PostQuitMessage(0);
      break;
    case WM_KEYDOWN:
      if(wParam == VK_LCONTROL)
        printf ("LSHIFT");
      break;
    return 0 ;
  }

  return DefWindowProc(hWnd, msg, wParam, lParam) ;
}

此代码可以使用 mingw32-GCC 编译,不会出现任何警告和错误。

如果按下左控件,它应该打印出“LSHIFT”,但它没有。

为什么?

【问题讨论】:

  • 你在 WM_DESTROY 中错过了一次休息
  • @Digital_Reality 谢谢,我编辑了。但是还是不行。

标签: c winapi


【解决方案1】:

您的程序没有创建窗口,因此它无法接收任何窗口消息。

您通常需要创建和注册一个窗口类(使用RegisterClass()RegisterClassEx()),然后使用CreateWindow()CreateWindowEx() 创建一个窗口实例。

【讨论】:

  • 但是我想在WinMain () 中创建一个控制台窗口:-)
  • 如果您想检测控制台窗口的键盘输入,请使用标准控制台功能。尝试使用 WinAPI 来做这件事会不必要地过于复杂。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-30
相关资源
最近更新 更多