下面的程序是我的Demo程序,我想在QLable上通过HWND句柄绘制一条线,但结果是,线看不到,这是为什么呀?
#include
#include
class MyLabel : public QLabel
{
public:
MyLabel(){}
~MyLabel(){;}
void paintEvent ( QPaintEvent *e )
{
QLabel::paintEvent(e);
HWND hWnd = (HWND)this->winId();
HDC hDc = GetDC(hWnd);
if (hDc)
{
MoveToEx(hDc, 100, 100, 0);
LineTo(hDc, 200, 200);
}
}
};
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
MyLabel *pLabel = new MyLabel;
pLabel->resize(600, 480);
pLabel->setText("12345");
pLabel->show();
return app.exec();
}
//------------------------------------------------------------------------------
由于需要通过Qt开发摄像头的 显示 程序,该摄像头带了一个 数据 采集卡,通过DEMO知道需要使用EImage类,里面使用了draw(HDC)的函数,而QT中好像 没有 直接获取HDC的函数, QLabel 类中有一个getDC()获取的HDC好像和 MFC 中的HDC不一样,用了不管用。所以在网上搜了一下,发现可以这样写:但是试了一下,发现还是不行,大神们,有没有其他的方法?
//------------------------------------------------------------------
调用windows 系统库
HWND nHwnd=FindWindow(NULL,NULL);
while(nHwnd != NULL)
{
TCHAR titleText[MAX_PATH] = {0};
::GetWindowText(nHwnd, titleText, MAX_PATH);
char str[MAX_PATH] = {0};
//获取字节长度
int iLength = WideCharToMultiByte(CP_ACP, 0, titleText, -1, NULL, 0, NULL, NULL);
//将tchar值赋给_char
WideCharToMultiByte(CP_ACP, 0, titleText, -1, str, iLength, NULL, NULL);
if (strlen(str)>0 && strcmp(str, "你的要找的窗口名") == 0)
{
}
}
{
HWND
AppWnd;
QString ClassName(
"#32770"
);
QString AppName(
"IJPAS"
);
LPCWSTR
App =
reinterpret_cast
<
LPCWSTR
>(ClassName.data());
LPCWSTR
AppCaption =
reinterpret_cast
<
LPCWSTR
>(AppName.data());
AppWnd= ::FindWindowW( App, AppCaption);
if
(!AppWnd)
QMessageBox::information(
this
,tr(
"Warning"
),tr(
"can't get IJPAS Window Handle!"
));
}
//----------------------------------------------------------
窗口构造的时候调用: setAccessibleName(strName)
下面是需要查找的地方:
QWidget* GetWidgetPtrByName(QString strWidget)
{
QWidgetList widgetLst;
QWidget *pWidget = NULL;
QString strName;
widgetLst = qApp->allWidgets();
for(int i = 0; i < widgetLst.size(); i++)
{
pWidget = widgetLst.at(i);
strName = pWidget->accessibleName();
if(strName == strWidget)
{
break;
}
}
return pWidget;
}
我这个是在linux下面这样做的,windows下应该也可以的,不知道有没有用,试试看。。