labwindows如何实现鼠标左键点击程序框右上角的X退出程序,完整代码
时间: 2023-11-28 20:48:55 浏览: 127
labview退出程序
3星 · 编辑精心推荐
LabWindows/CVI中可以使用Windows API函数来实现鼠标左键点击程序框右上角的X退出程序。
以下是一个简单的示例代码:
```c
#include <windows.h>
#include <userint.h>
int main(int argc, char *argv[])
{
int panelHandle;
MSG msg;
BOOL bRet;
if (InitCVIRTE(0, argv, 0) == 0)
return -1;
panelHandle = LoadPanel(0, "main.uir", PANEL);
// 注册关闭事件
SetCtrlAttribute(panelHandle, PANEL, ATTR_CLOSE_FUNC, QuitUserInterface);
// 监听窗口消息,以便检测关闭事件
while ((bRet = GetMessage(&msg, 0, 0, 0)) != 0)
{
if (bRet == -1)
{
// 错误处理
}
else
{
if (!PreTranslateMessage(&msg))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
}
DiscardPanel(panelHandle);
CloseCVIRTE();
return 0;
}
// 处理关闭事件
int CVICALLBACK QuitUserInterface(int panelHandle, int event, void *callbackData, int eventData1, int eventData2)
{
if (event == EVENT_CLOSE)
QuitUserInterface(0, 0, 0, 0);
return 0;
}
// 处理窗口消息
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_DESTROY:
PostQuitMessage(0);
break;
case WM_LBUTTONDOWN:
// 鼠标左键按下事件
if (wParam == MK_LBUTTON && lParam == MAKELPARAM(GetSystemMetrics(SM_CXSIZE) - 1, 0))
QuitUserInterface(0, 0, 0, 0);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
return 0;
}
```
在上面的代码中,我们首先使用`LoadPanel`函数加载一个面板,并注册了关闭事件。然后,我们进入一个循环,等待窗口消息的到来。当收到消息时,我们调用`PreTranslateMessage`函数进行消息预处理,以便在事件循环中处理关闭事件。最后,我们在事件处理函数`QuitUserInterface`中处理关闭事件,并在窗口消息处理函数`WndProc`中处理鼠标左键按下事件。如果鼠标左键按下位置在程序框右上角的X处,则退出程序。
注意,上面的代码中使用了Windows API函数`GetSystemMetrics`来获取窗口的边框大小,以便计算出程序框右上角的坐标。此外,我们还需要在程序的资源文件中定义一个面板`main.uir`,用于显示程序界面。
阅读全文