- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我有这门课:
WNDCLASSEX ActionButton::m_wndClass = CreateWndClass();
ActionButton::ActionButton() :
m_function(NULL), m_parameters(NULL), m_window()
{}
ActionButton::~ActionButton()
{
DestroyWindow(m_window);
}
bool ActionButton::DestroyButton()
{
return DestroyWindow(m_window);
}
bool ActionButton::Create(HWND parent, int x, int y, int heigth, int width)
{
HWND m_window = CreateWindowEx(0, L"Action button", NULL, WS_CHILD | WS_VISIBLE,
x, y, width, heigth, parent, NULL, NULL, NULL);
if (m_window == NULL)
return false;
SetWindowLongPtr(m_window, GWLP_USERDATA, reinterpret_cast<LONG_PTR>(this));
return true;
}
void ActionButton::SetFuncionLeftButtonDown(CallbackFunction f)
{
m_function = f;
}
void ActionButton::SetParametersLeftButtonDown(void* param)
{
m_parameters = param;
}
WNDCLASSEX ActionButton::CreateWndClass()
{
WNDCLASSEX m_wndClass = {0};
if (m_wndClass.cbSize == 0)
{
m_wndClass.cbSize = sizeof(WNDCLASSEX);
m_wndClass.style = CS_NOCLOSE;
m_wndClass.lpfnWndProc = WndProc;
m_wndClass.cbClsExtra = 0;
m_wndClass.cbWndExtra = 0;
m_wndClass.hInstance = GetModuleHandle(NULL);
m_wndClass.hIcon = NULL;
m_wndClass.hCursor = LoadCursor(NULL, IDC_ARROW);
m_wndClass.hbrBackground = HBRUSH(COLOR_BACKGROUND);
m_wndClass.lpszMenuName = NULL;
m_wndClass.lpszClassName = L"Action button";
m_wndClass.hIconSm = NULL;
}
RegisterClassEx(&m_wndClass);
return m_wndClass;
}
LRESULT __stdcall ActionButton::WndProc (HWND window, UINT msg, WPARAM wp, LPARAM lp)
{
ActionButton* classInfo = reinterpret_cast<ActionButton *>(GetWindowLongPtr(window, GWLP_USERDATA));
switch(msg)
{
case WM_LBUTTONDOWN:
{
(classInfo->m_function)(classInfo->m_parameters, classInfo);
classInfo->DestroyButton();
break;
}
case WM_DESTROY:
{
break;
}
default:
return DefWindowProc(window, msg, wp, lp);
}
return 0;
}
我发现了问题,它不会破坏窗口,而且我用调试器检查析构函数和 Destroy()
方法中的 m_window
是 NULL
。
我使用这个类的代码:
void Function(void* input, ActionButton*)
{
std::cout << "Works :)\n";
}
//....
ActionButton button;
button.Create(Form.Get(), 150,150, 50,50);
button.SetFuncionLeftButtonDown(Function);
最佳答案
HWND m_window
声明了一个隐藏类成员变量的局部变量。您的编译器应该警告您这一点。注意警告。
关于c++ - WinAPI DestroyWindow 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18513266/
DestroyWindow()文档说明如下: The function also destroys the window's menu, flushes the thread message queu
进行一些dll注入(inject)并需要销毁某个窗口。但是,DestroyWindow 仅当创建窗口的同一线程调用它时才起作用。否则,它将失败并显示错误 5:访问被拒绝。 我想也许我可以通过获取它的线
WndProc是主窗口的窗口过程。 ChildProc是子窗口的窗口过程。 ChildProc 未收到 WM_DESTROY。我做错了什么? 编辑:如果我从 hChild = CreateWindow
我在创建主窗口后创建了一个窗口,但在其句柄上调用 DestroyWindow 会关闭整个应用程序,我怎样才能简单地摆脱它? 它看起来像这样: BOOL InitInstance(HINSTANCE h
好吧,我可以理解该函数是否会返回错误或抛出异常,但出于某种原因,我对 DestroyWindow 的调用会在此时退出程序。就像实际的 exit() 函数改变了我的程序流程一样。文档没有提到这样的事情,
我打开了一个窗口,就像 OpenCV 教程所示,但我希望能够关闭该窗口并在程序中执行其他操作。图像显示正确,但是当调用 destroyWindow 时,它似乎什么也没做,只是移到下一行代码。我也尝试过
我有这门课: WNDCLASSEX ActionButton::m_wndClass = CreateWndClass(); ActionButton::ActionButton() : m_
嗨,我正在创建 Windows 上下文菜单的模拟。 显示对话框执行以下操作: 使用 CreateDialogIndirectParam 创建一个对话框 运行消息循环: while ( Continue
我目前正在 MFC 应用程序中处理对话框,诚然,我对 MFC 还很陌生。 假设我有一个类 A(派生自 CDialog),它使用类 B(也派生自 CDialog) >)。因此,A::OnInitDial
您好,我正在使用 MFC 制作一个基于对话框的应用程序: BOOL CClockMasterDlg::OnInitDialog() { CDialogEx::OnInitDialog(); m_Mod
在我的演示应用中 case WM_CLOSE: DestroyWindow(hndl); return 0; 和 case WM_CLOSE: PostQuitMessage(
我刚开始用 Python 学习 OpenCV for Raspberry Pi 3。我为 namedWindow() 写了一个简单的代码。问题是 destroyWindow() 没有像我预期的那样工作
我在 Mac OS X (Lion) 上的 Python 2.7 下使用 openCV...每当我运行代码以简单地显示相机源(来自 iSight)时,Python 就会卡住。看起来相机实际上并没有得到
我正在用 C++ 编写实时视频处理程序,并希望能够在彩色、灰度和单色模式下切换具有相同 mjpeg 流的三个窗口。我的所有图像源都在运行,但是,由于我的屏幕很小,我希望能够单独打开和关闭它们。为此,我
在下面的代码中,DestroyWindow 或DestroyAllWindows 无法关闭ShowImage 打开的窗口。当我试图通过单击关闭按钮关闭它时,窗口暂停。杀死窗口后,整个 IDLE 关闭。
我的程序使用以下代码生成一系列窗口: def display(img, name, fun): global clicked cv.NamedWindow(name, 1) c
我是一名优秀的程序员,十分优秀!