首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ Builder >

[win32]多个窗口之间怎样定义各自的变量互不影响?该如何处理

2013-01-27 
[win32]多个窗口之间怎样定义各自的变量互不影响?我在做一款能够显示和操作图像的软件软件里面可以创建多

[win32]多个窗口之间怎样定义各自的变量互不影响?
我在做一款能够显示和操作图像的软件
软件里面可以创建多个窗口,每个窗口可以以不同的方式查看同一幅图片,
于是我用
HWND hwndimg[20]   // 假设最大不超过20个窗口
这种方式创建了这些窗口,
然后给他们分别加上了同一个WndProc
于是问题来了:
我在WndProc函数中,定义了一些变量来确定图像显示的位置,比例等属性
比如:
static int xLoc, yLoc; // 等等诸如此类的变量
由于是static类型的,所以一个窗口的操作就同时影响了其他窗口
如果我不定义成static类型的,每次又都会被重置。。。
请问我该怎么办?
下面是我程序的大致结构

int WinMain(...)
{
HWND hwndmain;     // 主窗口
HWND hwndimg[20];  // 暂定最多20个窗口
MSG msg;
WNDCLASS wndclass
/* ...窗口初始化代码...  */
wndclass.lpfnWndProc = ImgWndProc;
hwnd[0] = CreateWindow(......) // 一开始先创建一个窗口
ShowWindow(hwnd, nCmdShow);
UpdateWindow(hwnd);
return msg.wParam;
}

// 下面是回调函数
LRESULT CALLBACK ImgWndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    static int xLoc, yLoc; // 一些变量初始化
    // 还有很多类似变量

    switch(message)
    {
    case WM_CREATE:
        // ...一些代码

    case WM_PAINT:
        // ...一些代码

    case WM_DESTROY:
        DestroyWindow(hwnd);
        return 0;
    }
    return DefWindowProc(hwnd, message, wParam, lParam);
}

[解决办法]
用SetWindowLong 和GetWindowLong吧,可以把数据存到cbWindowExtra里面,具体用法你百度一下就好
如果是64位 用SetWindowLongPtr和GetWindowLongPtr

热点排行