none
Не могу понять... RRS feed

  • Общие обсуждения

  • Подскажите, в чем  может быть проблема:

    BOOL CDDListBox::DDCreate(CWnd *pParent)
    
    {
    
    	ASSERT(pParent);
    
    	ASSERT(::IsWindow(*pParent));
    
    
    
    	if (!CWnd::CreateEx(WS_EX_NOACTIVATE | WS_EX_TOOLWINDOW | WS_EX_TOPMOST, WC_LISTBOX, NULL, WS_BORDER | WS_POPUP | WS_VSCROLL | LBS_HASSTRINGS | LBS_OWNERDRAWFIXED | LBS_SORT, CRect(0, 0, 1, 1), pParent, 0))
    
    	{
    
    		return FALSE;
    
    	}
    
    	ASSERT(GetParent() == pParent); // Тут программа вылетает
    
    	::SetClassLongPtr(m_hWnd, GCL_STYLE, ::GetClassLongPtr(m_hWnd, GCL_STYLE) | CS_DROPSHADOW);
    
    	SetFont(CFont::FromHandle((HFONT)::GetStockObject(DEFAULT_GUI_FONT)));
    
    
    
    	return TRUE;
    
    }

    Если закомментировать оператор ASSERT, то при отображении окна оно не отображается (отображаю методом SetWindowPos, который возвращает TRUE), но остается только рамка тени.

    Какие идеи?

    17 января 2011 г. 10:53

Все ответы

  • Возможно дело в CRect(0, 0, 1, 1) , т.к. тут у вас указан достаточно маленький размер. Или вы помот изменяете ширину и длину в SetWindowPos?

    Также может попробовать сразу отобразить окно (установить флаг WS_VISIBLE).

     

    ASSERT(GetParent() == pParent); // Тут программа вылетает

    Ну это означает, что указатели не равны, раз вы проверяете их, то может лучше сразу в CreateEx использовать GetParent()?

    Попробуйте так:

    	CWnd* pWnd = new CStatic;
    	BOOL res = pWnd->CreateEx(WS_EX_NOACTIVATE | WS_EX_TOOLWINDOW | WS_EX_TOPMOST,
    		 WC_LISTBOX, NULL, WS_BORDER | WS_POPUP | WS_VSCROLL | LBS_HASSTRINGS | LBS_OWNERDRAWFIXED | LBS_SORT | WS_VISIBLE , CRect(0,0,20,20) , GetParent() , 0);
    
    	if (!res)
    	{
    		return FALSE;
    	}
    

     


    Для связи [mail]
    25 января 2011 г. 7:15