Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Visual C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.10.2016, 13:27   #1
erslgoeirjh
Форумчанин
 
Регистрация: 19.05.2009
Сообщений: 153
По умолчанию Проблема с изменением цвета в кнопке

На основе примера кнопки, меняющей цвет, найденного в Интернете, я написал следующее:

Код:
// файл MyButton.h
#ifndef MY_BUTTON_H
#define MYBUTTON_H
 
#include <afxwin.h>
 
class CMyButton : public CButton
{
    virtual void DrawItem(LPDRAWITEMSTRUCT  lpDrawItemStruct);
};
Код:
// файл MyButton.cpp
#include "stdafx.h"
#include "MyButton.h"
 
void  CMyButton::DrawItem(LPDRAWITEMSTRUCT  lpDrawItemStruct)
{
    UINT  uStyle = DFCS_BUTTONPUSH;
    ASSERT(lpDrawItemStruct->CtlType = ODT_BUTTON);
    if (lpDrawItemStruct->ItemSTate & ODS_SELECTED)
        uStyle |= DFCS_PUSHED;
    ::DrawFrameControl(lpDrawItemStruct->hDC,lpDrawItemStruct->rcItem,DFC_BUTTON,uStyle);
    CString  strText;
    GetWindowText(strText);
    COLORREF  crOldColor = ::SetTextColor(lpDarwItemStruct->hDC,RGB(255,0,0));
    ::DrawText(lpDrawItemStruct->hDC,strText,strText.GetLength(),&lpDrawItemStruct->rcItem,DT_SINGLELINE|DT_VCENTER|DT_CENTER);
    ::SetTextColor(lpDrawItemStruct->hDC,crOldColor);
}
в классе CMyDialog:
Код:
class CMyDialog : public CDialog
{
//...
public:
//...
//CButton  m_IDC_BUTTON2; // закомментировал прежнее;
CMyButton  m_IDC_BUTTON2;
//...
};

в инициализирующей функции:

Код:
CMyDialog::OnInitDialog
{
    CDialog::OnInitDialog();
    //...
    m_IDC_BUTTON2.Create(_T("OK"),WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON|BS_OWNERDRAW,CRect(407,79,50,14),this,1);
    //...
}

И в этой инициализирующей функции CMyDialog::OnInitDialog на строке m_IDC_BUTTON2.Create отладчик выдаёт ошибку:

Цитата
Цитата:
Debug Assertion Failed!

Program C:\Windows\system32\mfc110d.dll
File:f:\dd\vctools\vs7libs\ship\atl mfc\src\mfc\wincore.cpp

Line:691

Что это означает? Как исправить эту ошибку?
(Я работаю в MS Visual C++ 2012, операционная система Windows 7).
erslgoeirjh вне форума Ответить с цитированием
Старый 26.10.2016, 13:46   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

Жмете кнопку break и студия сама перейдет в wincore и встанет на строке 691. Смотрите, что там за ASSERT стоит и думаете почему он проваливается.
p51x вне форума Ответить с цитированием
Старый 22.09.2017, 18:21   #3
yanich89
Пользователь
 
Регистрация: 20.09.2017
Сообщений: 17
По умолчанию

Попробуй скомпилить и запустить релиз.

Я решаю щас туже проблему (Изменение цвета кнопки). Программлю в Visual Studio 2017. У меня тож Windows 7. Пока не получается. Но я перехватываю сообщение "=WM_CTLCOLOR" кнопки. Оно именно так называется в мастере классов. Вот код:

HBRUSH CMyButton::CtlColor(CDC* pDC, UINT nCtlColor)
{
long lRGB = RGB(255, 0, 0);
HBRUSH hBrush = CreateSolidBrush(lRGB);

// TODO: Вернуть значение дескриптора кисти, отличное от NULL кисть, если не нужно вызывать обработчик родителя
return hBrush;
}

Почему то рисуется только красная рамка у кнопки. И ваще при создании кнопки в функции CButton.Create(), при задании стиля SS_OWNERDRAW, почему то у кнопки появляется стрелка, как у комбобокса. Как эту дрянь исправить?
yanich89 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Копирование с изменением цвета и сортировка Тандер Microsoft Office Excel 3 12.02.2014 21:16
Поочередный вывод значений в TextBox с изменением цвета ячейки marvi Microsoft Office Excel 3 08.05.2011 22:34
Кнопка с изменением ее цвета и картинки RuVarez Компоненты Delphi 2 06.05.2011 12:40
Присвоение цвета кнопке если на другом листе ячейка становится не пустой Energetik Microsoft Office Excel 10 10.03.2011 18:24
Расчет в ячейке с изменением цвета... Александр_63 Microsoft Office Excel 5 06.06.2010 13:02