C++ C++;VS 2017设置全局变量--程序仅在调试中使用断点工作

C++ C++;VS 2017设置全局变量--程序仅在调试中使用断点工作,c++,C++,当我在应该设置为true的断点处设置断点时,我的“lClick”全局变量成功地设置为true,但如果不是这样运行,则不会。请帮忙 在global.h中: #pragma once extern bool lClick; 在global.cpp中: #include "global.h" bool lClick = false; 在main.cpp中: LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPAR

当我在应该设置为true的断点处设置断点时,我的“lClick”全局变量成功地设置为true,但如果不是这样运行,则不会。请帮忙

在global.h中:

#pragma once

extern bool lClick;
在global.cpp中:

#include "global.h"

bool lClick = false;
在main.cpp中:

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    switch (message)
    {
        case WM_LBUTTONDOWN:
        {
            int iPosX = LOWORD(lParam);
            int iPosY = HIWORD(lParam);
            lClick = true;
            break;
        }

        case WM_PAINT:
        {
            PAINTSTRUCT ps;
            HDC hdc = BeginPaint(hWnd, &ps);

            // draw bitmaps
            DrawAll(hdc);

            EndPaint(hWnd, &ps);
        }
在Scrabble.cpp中:

void DrawArrow(HDC hdc, int x, int y)
{
    Draw("arrowrt_mask.bmp", hdc, 110, 150, 1);
    Draw("arrowrt.bmp", hdc, 110, 150, 2);
}

void DrawAll(HDC hdc)
{
    InitPaint(hdc);
    Draw("board.bmp", hdc, 10, 50);
    Draw("racks.bmp", hdc, 770, 10);
    Draw("textarea.bmp", hdc, TEXT_AREAX, TEXT_AREAY);

    // display arrow if player left clicked somewhere on the board
    if (lClick)
    {
        DrawArrow(hdc, 0, 0);
    }

目标是在用户左键单击时在拼字板上的某个位置绘制箭头

绘画只在需要的时候进行。您可能打算在单击鼠标时重新绘制屏幕,但如果是这样,则需要使窗口无效

假设hwnd是您的主窗口,将其添加为案例WM_LBUTTONDOWN(中断前)的最后一行:


为什么需要全局变量呢?谢谢!这就解决了问题。但是,在箭头出现之前,整个屏幕会闪烁。有没有办法解决这个问题?是的,请看文档中的。“rect”=矩形,它不需要是完整的客户端区域。此外,如果您想更新2个点,例如旧的和新的单击位置,您可以使用2个小矩形调用InvalidateStribute两次。Windows将在下次发送绘制事件时收集并合并所有无效区域。
 InvalidateRect(hwnd, NULL, TRUE);