首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过DLL向MetaTrader4的图表添加子窗口-闪烁(而不是重绘)

通过DLL向MetaTrader4的图表添加子窗口-闪烁(而不是重绘)
EN

Stack Overflow用户
提问于 2013-09-16 22:46:08
回答 1查看 932关注 0票数 0

我想要添加一个子窗口到MetaTrader4的图表窗口,它总是保持在顶部,没有闪烁,只是在任何时候都静态地在那里(在父窗口中)。我从一个动态链接库(C++)来做这件事。

我从mql端调用此方法:

代码语言:javascript
复制
MT4_EXPFUNC int __stdcall testWindow(HWND hwnd) {
    prnt_hWnd = hwnd;
    CreateThread(0, NULL, ThreadProc, (LPVOID)L"Window Title", NULL, NULL);
    return 0;
}

父窗口的(图表)句柄是作为参数给出的。

代码语言:javascript
复制
DWORD WINAPI ThreadProc( LPVOID lpParam )
{
    MSG messages;
    /*
    ... in createWindowClass:


        WNDCLASSEX wc;
        wc.hInstance =  GetModuleHandle(NULL);
        wc.lpszClassName = (LPCWSTR)L"MyClass";
        wc.lpszClassName = (LPCWSTR)szClassName;
        wc.lpfnWndProc = DLLWindowProc;
        wc.style = CS_HREDRAW | CS_VREDRAW | CS_DBLCLKS;
        ...
    */
    CreateWindowClass(L"MyClass");
    HWND hwnd = CreateWindowEx (0, L"MyClass", NULL, WS_VISIBLE | WS_CHILD , CW_USEDEFAULT, CW_USEDEFAULT, 400, 300, prnt_hWnd, NULL, GetModuleHandle(NULL), NULL );
    ShowWindow (hwnd, SW_SHOWNORMAL);
    while (GetMessage (&messages, NULL, 0, 0))
    {
        TranslateMessage(&messages);
        DispatchMessage(&messages);
    }
    return 1;
}

我这样处理window的消息:

代码语言:javascript
复制
LRESULT CALLBACK DLLWindowProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    switch (message) {
        case WM_PAINT: {
             PAINTSTRUCT ps;
             BeginPaint( hwnd, &ps );
             EndPaint( hwnd, &ps );
             return 0;
           }
        case WM_COMMAND:
              /* */                   
               break;
        case WM_DESTROY:
            PostQuitMessage (0);
            break;
        default:
            return DefWindowProc (hwnd, message, wParam, lParam);
    }
    return 0;
}

我的子窗口在开始时出现,然后(我猜)父窗口正在被重新绘制,突然它消失了,然后它只是闪烁(快速出现-消失)。

我的目标是在图表上静态地有一个子窗口,所以总是在最上面,不闪烁。只有在没有WS_CHILD属性的情况下,我才能做到这一点。但是我的子窗口不在父窗口上。

EN

回答 1

Stack Overflow用户

发布于 2013-12-08 02:37:06

尝试将WS_CLIPCHILDREN样式添加到图表窗口。我会通过一些MT4导出函数在init()中传递MQL4端的句柄。例如,符号( HWND hChartWnd )和传递WindowHandle( Symbol(),Period() )作为参数。然后,在该函数中,我将尝试执行类似以下操作:

代码语言:javascript
复制
if ( ::IsWindow( hChartWnd ) ) {
    DWORD style = GetWindowLong( hChartWnd, GWL_STYLE );
    style |= WS_CLIPCHILDREN;
    SetWindowLong( hChartWnd, GWL_STYLE, style );
  }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18830897

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档