Кнопка в чарте средствами WinAPI CreateWindowExW ?

 

У кого-нибудь есть пример "сделать кнопку в чарте средствами WinAPI CreateWindowExW" ?

С/С++ вестимо, всё одно очевидно это DLL и без колбеков не обойтись.

переосмысливаю прежние идеи, и такая штука всё-тами нужна..

старые эксперименты заканчились тем что кнопка получалась, но нетерпимо моргала. 

кто владеет WinAPI на низком уровне - подскажите что могло пойти не так :-)

/***********************************************************
        Создание класса для окон
***********************************************************/
BOOL
CreateChartLevelWindowClass()
{
        HINSTANCE hinstance = GetModuleHandleA(NULL);   // получаем инстанс приложения (exe-шника)
    WNDCLASSEX wcx; 
        memset(&wcx,0,sizeof(WNDCLASSEX));
        // copy-paste from https://docs.microsoft.com/en-us/windows/win32/winmsg/using-window-classes
    // Fill in the window class structure with parameters 
    // that describe the main window. 
 
    wcx.cbSize = sizeof(wcx);          // size of structure 
    wcx.style = CS_CLASSDC | CS_HREDRAW | CS_VREDRAW;                    // redraw if size changes
    wcx.lpfnWndProc = ChartLevelWndProc;     // points to window procedure 
    wcx.cbClsExtra = 0;                // no extra class memory 
    wcx.cbWndExtra = sizeof(HANDLE);   // будем сохранять 1 указатель
    wcx.hInstance = hinstance;         // handle to instance 
    wcx.hIcon = LoadIcon(NULL, 
        IDI_APPLICATION);              // predefined app. icon 
    wcx.hCursor = LoadCursor(NULL, 
        IDC_ARROW);                    // predefined arrow 
    wcx.hbrBackground = (HBRUSH)(COLOR_BTNFACE + 1);
    wcx.lpszMenuName =  "MainMenu";    // name of menu resource 
    wcx.lpszClassName = "ChartLevelWindowClass";  // name of window class 
    wcx.hIconSm = LoadImage(hinstance, // small class icon 
        MAKEINTRESOURCE(5),
        IMAGE_ICON, 
        GetSystemMetrics(SM_CXSMICON), 
        GetSystemMetrics(SM_CYSMICON), 
        LR_DEFAULTCOLOR); 
        //wcx.style = CS_PARENTDC | CS_DBLCLKS; 
 
    // Register the window class. 
    return RegisterClassEx(&wcx);       
}       
HWND
CreateChartWindow(HWND hChart)
{
        ChartLevelData *data=(ChartLevelData *)malloc(sizeof(ChartLevelData));
        memset(data,0,sizeof(ChartLevelData));
        HINSTANCE hinstance=GetModuleHandleA(NULL);
        WriteLog("hinstance=%x hChart=%x",hinstance,hChart);
        data->hMain=CreateWindowEx(
                WS_EX_LEFT,
                "ChartLevelWindowClass",//"MDIClient",//
                "ChartLevel Window",
                WS_CHILD | WS_CLIPCHILDREN | WS_VISIBLE /*| BS_PUSHBUTTON*/ | WS_CLIPCHILDREN | WS_CLIPSIBLINGS,//(WS_CAPTION | WS_SYSMENU | WS_THICKFRAME | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_CLIPCHILDREN),
                10,10,100,100,//CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,
                hChart,0L,hinstance,data
        );
        if (data->hMain==NULL) {
                free(data->hMain);
                return 0;
        }
        SetWindowPos(data->hMain,HWND_TOPMOST,10,10,100,100,SWP_NOMOVE|SWP_NOSIZE);
        ShowWindow(data->hMain,1);
        UpdateWindow(data->hMain);
        return data->hMain;
}
Причина обращения: