M@gelearn Ответов: 2

Какая-нибудь помощь с управлением заголовком ?


Ну, я никогда не делал этого раньше, я не получаю никаких ошибок, но я не вижу никакого элемента управления заголовком в моем приложении.

#if defined(UNICODE) && !defined(_UNICODE)
    #define _UNICODE
#elif defined(_UNICODE) && !defined(UNICODE)
    #define UNICODE
#endif
#define _WIN32_IE 0x0300
#include <tchar.h>
#include <windows.h>
#include <commctrl.h>

LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);

TCHAR szClassName[ ] = _T("Header Control");
HINSTANCE hInst;
HWND hHeader;
int ID_HEADER;


/**********************************************************************************/
HWND DoCreateHeader(HWND hwnd)
{
    HWND hHeader;
    RECT rcParent;
    HDLAYOUT hdl;
    WINDOWPOS wp;

    INITCOMMONCONTROLSEX icex;
    icex.dwSize = sizeof(INITCOMMONCONTROLSEX);
    icex.dwICC = ICC_LISTVIEW_CLASSES;

    InitCommonControlsEx(&icex);

    if((hHeader = CreateWindowEx(0, WC_HEADER, (LPCSTR)NULL, WS_CHILD | WS_VISIBLE |
                             HDS_BUTTONS | HDS_HORZ | WS_BORDER,
                             0, 0, 0, 0, hwnd, (HMENU)ID_HEADER, hInst, (LPVOID)NULL)) = NULL);
                    return (HWND)NULL;

    GetClientRect(hwnd, &rcParent);

    hdl.prc = &rcParent;
    hdl.pwpos = (&wp);


    if(!SendMessage((HWND)hHeader, HDM_LAYOUT, 0, (LPARAM)&hdl))
        return (HWND)NULL;

    SetWindowPos(hHeader, wp.hwndInsertAfter, wp.x, wp.y, wp.cx, wp.cy, wp.flags | SWP_SHOWWINDOW);

    return(hHeader);
}
/**********************************************************************************/
int DoInsertItem(HWND hwnd, int iInsertAfter, int nWidth, LPTSTR lpsz)
{
    HDITEM hdi;
    int index;

    hdi.mask = HDI_TEXT | HDI_FORMAT | HDI_WIDTH;
    hdi.cxy = nWidth;
    hdi.pszText = lpsz;
    hdi.cchTextMax = sizeof(hdi.pszText)/sizeof(hdi.pszText[0]);
    hdi.fmt = HDF_LEFT | HDF_STRING;

    index = SendMessage(hHeader, HDM_INSERTITEM, (WPARAM)iInsertAfter, (LPARAM)&hdi);

    return index;
}
/**********************************************************************************/
LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
    switch(msg)
    {
    case WM_CREATE:
        {
            DoCreateHeader(hwnd);
            break;
        }
    case WM_DESTROY:
        PostQuitMessage(0);
        break;
    default:
        return DefWindowProc(hwnd, msg, wParam, lParam);
    }
    return 0;
}
/**********************************************************************************/
int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR lpszArgs, int nCmdShow)
{
    HWND hwnd;
    MSG messages;
    WNDCLASSEX exc;

    exc.cbClsExtra    = 0;
    exc.cbWndExtra    = 0;
    exc.hbrBackground = (HBRUSH)COLOR_BACKGROUND;
    exc.hCursor       = LoadCursor(NULL, IDC_ARROW);
    exc.hIcon         = LoadIcon(NULL, IDI_APPLICATION);
    exc.hIconSm       = LoadIcon(NULL, IDI_APPLICATION);
    exc.hInstance     = hInst;
    exc.lpfnWndProc   = WndProc;
    exc.lpszClassName = szClassName;
    exc.style         = CS_HREDRAW | CS_VREDRAW | CS_DBLCLKS;
    exc.cbSize        = sizeof (WNDCLASSEX);
    exc.lpszMenuName  = NULL;

    if(!RegisterClassEx(&exc))
        return 0;

    hwnd = CreateWindowEx(WS_EX_CLIENTEDGE, szClassName, _T("Header Control"),
                          WS_OVERLAPPEDWINDOW, 350, 130, 700, 500, HWND_DESKTOP,
                          NULL, hInst, NULL) ;

    ShowWindow(hwnd, nCmdShow);

    while(GetMessage(&messages, NULL, 0, 0))
    {
        TranslateMessage(&messages);
        DispatchMessage(&messages);
    }
    return messages.wParam;
}


Что я уже пробовал:

Пока ничего.. :\
Я смотрю прямо сейчас, если что-то упущу...
Пожалуйста, помогите!

Richard MacCutchan

Пожалуйста, не просто сбрасывайте свой код и не ждите, что мы выясним, в чем ваша проблема. Используйте Улучшить вопрос ссылка выше и добавьте соответствующие сведения о том, что не так, включая любые сообщения об ошибках.

M@gelearn

Сожалеть об этом.. Я не говорил, что у меня есть ошибки, если вы хорошо прочитали сообщение.. люди сегодня злятся, потому что у них есть своя проблема, и они не хотят других, это не значит, что кто-то должен расстраиваться, я не ожидаю, что кто-то решит мою проблему, кому скучно с таким простым кодом, просто игнорируйте меня, я не на вашем уровне. Если кто-то хочет заставить меня понять, что я сделал не так или, может быть, я что-то упустил, благослови его. Я сказал, что скопировал ту же ссылку, и я не получаю никаких ошибок, мое окно появляется, я просто не вижу никакого элемента управления заголовком. Это все
Большое вам спасибо за помощь..

0x01AA

Но похоже, что вы скопировали откуда-то несколько строк кода и не понимаете их, а теперь ожидаете, что этот форум объяснит вам код...

Richard MacCutchan

Я действительно сказал "любые сообщения об ошибках", потому что ваш вопрос был неясен, поэтому я понятия не имел, что происходит, когда вы запускаете свой код. Я не знаю, откуда вы получаете свои образцы, но большинство примеров кода на веб-сайте документации Microsoft действительно работают так, как указано в списке.

2 Ответов

Рейтинг:
9

M@gelearn

Спасибо ... это очень помогает !!!


0x01AA

А 1 за то, что вы сами приняли свое не решение как решение.

Рейтинг:
2

Richard MacCutchan

Я только что использовал код из Как создать элемент управления заголовка - Win32-приложений, Майкрософт документы[^] и это прекрасно работает.


0x01AA

Мне не нравятся голоса ниже 4 без комментариев, так что есть что-то для баланса.

Richard MacCutchan

Спасибо. Наверное, ему не понравилось мое первоначальное замечание.