相关疑难解决方法(0)

GWL_USERDATA用于存储对象指针的替代方法是什么?

在我工作的Windows应用程序中,我们有一个直接位于Win32上方的自定义框架(不要问).当我们创建一个窗口时,我们通常的做法是将this窗口的用户数据区域放入SetWindowLong(hwnd, GWL_USERDATA, this),这样我们就可以进行类似MFC的回调或紧密集成WndProc.问题是这不适用于Win64,因为LONG只有32位宽.什么是解决这个问题的更好的解决方案适用于32位和64位系统?

windows winapi win64

27
推荐指数
2
解决办法
2万
查看次数

为什么回调函数在类中声明时需要是静态的

我试图在类中声明一个回调函数,然后在某处我读取函数需要是静态的,但它没有解释为什么?

#include <iostream>
using std::cout;
using std::endl;

class Test
{
public:
    Test() {}

    void my_func(void (*f)())
    {
        cout << "In My Function" << endl;
        f(); //Invoke callback function
    }

    static void callback_func()
    {cout << "In Callback function" << endl;}
};

int main()
{
    Test Obj;
    Obj.my_func(Obj.callback_func);
}
Run Code Online (Sandbox Code Playgroud)

c++ callback

16
推荐指数
2
解决办法
2万
查看次数

作为winAPI回调的类方法

将winAPI消息回调函数设置为类的方法是否可行.如果是这样,这将如何最好地实施?我想知道它是否有可能.

很抱歉这个简短的问题,希望您能够提供有用的回复.

提前致谢 :).

c++ winapi

3
推荐指数
1
解决办法
5119
查看次数

WndProc的类方法

文章解释了出色的选项调用类成员的WndProc.我在stackoverflow中看到了这个响应,但是在CreateWindow之后关联类成员WndProc的主要问题是某些消息将丢失(包括重要的WM_CREATE),如上所述.

我的问题:我想听听专家的意见,即下面公开的方法或新方法是最好的(性能,维护性......)来创建一个类成员WndProc.

简要介绍文章中公开的两个最终解决方案(假设它存在一个带WndProc方法的Window类):

  1. 具有this全局指针存储的每窗口数据,使用CRITICAL_SECTION保护它以使其线程安全(从此处提取):

    // The helper window procedure
    // It is called by Windows, and thus it's a non-member function
    // This message handler will only be called after successful SetWindowLong call
    // We can assume that pointer returned by GetWindowLong is valid
    // It will route messages to our member message handler
    LRESULT CALLBACK WndProc2(HWND hwnd, UINT msg, WPARAM wp, LPARAM lp) {
      // Get …
    Run Code Online (Sandbox Code Playgroud)

c++ winapi wndproc

3
推荐指数
1
解决办法
2975
查看次数

标签 统计

c++ ×3

winapi ×3

callback ×1

win64 ×1

windows ×1

wndproc ×1