Как создать STATIC контрол в чужом окне?
От: _Cool-  
Дата: 25.02.09 07:35
Оценка:
Пытаюсь вывести текст в чужом окне, получаю его HWND, создаю окно с ним в качестве родителя. Оно появляется, но постоянно затирается, то появится, то исчезнет. Как нужно правильно делать?


void main()
{
..............
    GetClassInfo(GetModuleHandle(NULL), L"STATIC", &wcls);
    CopyMemory(&wcl, &wcls, sizeof(WNDCLASS));
    wcl.hInstance       = GetModuleHandle(NULL);
    wcl.lpszClassName   = L"FTInfoWin";
    wcl.lpfnWndProc     = (WNDPROC)WinDialogProc;
    wcl.hbrBackground   = (HBRUSH)GetStockObject(BLACK_BRUSH);
    RegisterClass(&wcl);
 
    HWND hwnd = CreateWindow(   L"FTInfoWin", 
                                L"",
                                WS_CHILD,
                                posx, posy,
                                15, 15,
                                parent->HWnd(),           // HWND чужого окна
                                (HMENU)"", 
                                GetModuleHandle(NULL),
                                NULL);
    if (hwnd)
    {
        ShowWindow(hwnd,SW_SHOW);
        UpdateWindow(hwnd);
        SetWindowPos(hwnd, HWND_TOPMOST, posx, posy, 15, 15, SWP_SHOWWINDOW);
        }
...............
}
 
 
int CFTChildWindow::OnDraw()
{
    PAINTSTRUCT ps;
    HDC hDC = GetDC(hWnd);
    SetBkColor(hDC, RGB(0,0,0));
    SetTextColor(hDC, RGB(0,255,0));
    wchar_t text[255];
    if (_itow(iValue, text, 10))
        TextOut(hDC, 0,0, text, wcslen(text));
    return 1;
}
 
LRESULT CALLBACK WinDialogProc(HWND hWnd,UINT msg,WPARAM wParam,LPARAM lParam)
{
    switch (msg)
    {
        case WM_PAINT:
            {
            LRESULT r = DefWindowProc(hWnd,msg,wParam,lParam);
            if (windows.find(hWnd)!=windows.end())
            {
                windows[hWnd]->OnDraw();              // рисуем наш контрол
            }
            return r;
            }
        break;
         }
}
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.