Вопрос или проблема
Я написал несколько кодов, но они не работают так, как я планировал.
Прицел появляется, если я не нажимаю кнопку.
Моя цель состоит в том, чтобы при нажатии кнопки (OnBnClickedCheck1) прицел появился.
Мой код:
#include "stdafx.h"
#include "BaslerCode.h"
#include <pylon/PylonIncludes.h>
#include <iostream>
#include "resource.h"
#include "CImageEventHandler.h"
#include <stdio.h>
#include <string.h>
void BaslerCode::OnImageGrabbed(CInstantCamera& camera, const CGrabResultPtr& grabResult)
{
ptrGrabResult = grabResult;
if (ptrGrabResult->GrabSucceeded())
{
int Width = ptrGrabResult->GetWidth();
int Height = ptrGrabResult->GetHeight();
pBitmapInfo->bmiHeader.biWidth = Width;
pBitmapInfo->bmiHeader.biHeight = -Height;
SetStretchBltMode(m_pDC->GetSafeHdc(),HALFTONE);
StretchDIBits(m_pDC->GetSafeHdc(), 0, 0, m_rectWidth, m_rectHeight, 0, 0, Width, Height, ptrGrabResult->GetBuffer(), pBitmapInfo, DIB_RGB_COLORS, SRCCOPY);
CWnd* pPictureBox = AfxGetApp()->GetMainWnd()->GetDlgItem(IDC_PICTUREBOX);
if (pPictureBox)
{
CRect rect;
pPictureBox->GetClientRect(&rect);
int rectWidth = rect.Width();
int rectHeight = rect.Height();
if (bool OnBnClickedCheck1 = true)
{
CPen whitePen(PS_SOLID, 1, RGB(255, 255, 255));
CPen* pOldPen = dc.SelectObject(&whitePen);
dc.MoveTo(0, rectHeight / 2);
dc.LineTo(rectWidth, rectHeight / 2);
dc.MoveTo(rectWidth / 2, 0);
dc.LineTo(rectWidth / 2, rectHeight);
dc.SelectObject(pOldPen);}
}
}
}
Пожалуйста, простите меня, если я допустил основную ошибку.
Ответ или решение
Уважаемый(ая) автор вопроса,
Спасибо за представленный код и описание проблемы. Давайте разберемся с вашей задачей, связанной с отображением прицела (crosshair) только при нажатии кнопки OnBnClickedCheck1
.
В вашем текущем коде вы пытаетесь использовать условие if (bool OnBnClickedCheck1 = true)
для проверки, нажата ли кнопка. Однако в этом случае вы просто создаете новую переменную OnBnClickedCheck1
, а не проверяете состояние вашей кнопки. Для решения вашей задачи необходимо использовать переменную-член класса, которая будет отслеживать состояние нажатия кнопки.
Вот как можно модифицировать ваш код.
- Добавьте переменную-член в класс
BaslerCode
, чтобы отслеживать состояние кнопки.
class BaslerCode {
private:
bool m_bShowCrosshair; // Переменная для отслеживания состояния кнопки
public:
BaslerCode() : m_bShowCrosshair(false) {} // Инициализация переменной
void OnBnClickedCheck1(); // Обработчик нажатия кнопки
void OnImageGrabbed(CInstantCamera& camera, const CGrabResultPtr& grabResult);
};
- Реализуйте обработчик нажатия кнопки, который будет менять состояние переменной
m_bShowCrosshair
.
void BaslerCode::OnBnClickedCheck1() {
m_bShowCrosshair = !m_bShowCrosshair; // Переключение состояния
}
- Измените условие в
OnImageGrabbed
, чтобы использовать переменнуюm_bShowCrosshair
для отображения прицела.
if (m_bShowCrosshair) {
CPen whitePen(PS_SOLID, 1, RGB(255, 255, 255));
CPen* pOldPen = dc.SelectObject(&whitePen);
dc.MoveTo(0, rectHeight / 2);
dc.LineTo(rectWidth, rectHeight / 2);
dc.MoveTo(rectWidth / 2, 0);
dc.LineTo(rectWidth / 2, rectHeight);
dc.SelectObject(pOldPen);
}
Теперь вы сможете управлять показом прицела путем нажатия на кнопку, а именно, при каждом нажатии состояние переменной m_bShowCrosshair
будет изменяться, что будет приводить к соответственно новому отображению прицела.
Если у вас есть дополнительные вопросы или возникли сложности, не стесняйтесь задать их. Надеюсь, это решение поможет вам добиться желаемого результата.
С уважением,
[Ваше имя]