c++ 多文件共享变量 - 全局变量

引言

之前KMU-Counter中也用到了,但是最近在制作安装包时又遇到了这个,记录一下吧。

内容

比如说目录结构是这样的,以windows api窗口为例:

  • main.cpp
  • framework.h
  • framework.cpp
  • config.h
  • config.cpp

比如说我有一个当前窗口位置的变量,其中main中的WndProc中的消息,存在WM_MOVE和WM_SIZE,标识窗口移动和尺寸改变。部分代码如下。
其中window_position可以定义成一个全局变量,供framework和main使用,config.h

config.h

extern int window_position[4];

config.cpp

int window_position[4] = {9527, 114514, 640, 480};  // 这里的顺序是左边,定边,宽度,高度,这里随便定义的。

main.cpp

case WM_MOVE:
            window_position[0] = LOWORD(lParam);
            window_position[1] = HIWORD(lParam);
            break;
        case WM_SIZE:
            window_position[2] = LOWORD(lParam);
            window_position[3] = HIWORD(lParam);
            break;

framework.cpp

#include "config.h" // 这里引入这个头文件
 SetWindowPos(hwnd, NULL, window_position[0], window_position[1], window_position[2], window_position[3], SWP_NOZORDER | SWP_NOOWNERZORDER | SWP_FRAMECHANGED); // 移动窗口到这个位置。

结语

这玩意儿还是得多积累,现在这个时代学习成本降低了,因为存在GPT等AI,更方便学习和查错。

评论 4

  1. 前端返给我list数组
    在config.h中,使用extern关键字声明window_position变量,表明该变量在其他文件中定义,这样在包含config.h头文件的其他文件中就可以使用这个变量。在config.cpp中定义并初始化window_position,指定了窗口的初始位置和大小。在main.cpp的窗口消息处理函数WndProc里,当接收到WM_MOVE和WM_SIZE消息时,更新window_position变量的值。在framework.cpp中,通过包含config.h头文件,使用window_position变量的值来调用SetWindowPos函数,实现将窗口移动到指定位置。
    1. zmx
      YES!
  2. 前端返给我list数组
    我理解的当参数发生改变时,就在
    case WM_MOVE:
    window_position[0] = LOWORD(lParam);
    window_position[1] = HIWORD(lParam);
    break;
    case WM_SIZE:
    window_position[2] = LOWORD(lParam);
    window_position[3] = HIWORD(lParam);
    break;
    进行了修改全局变量windows_position
    1. zmx
      是的,这里代码没有完全贴上,这实际上是消息处理代码中的一部分
提交后需要审核才会公开。