Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как изменить цвет контура и цвет фона кнопки? 
:(
    Опции темы
erslgoeirjh
Дата 25.10.2016, 15:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 147
Регистрация: 16.12.2005

Репутация: нет
Всего: нет



Как сделать так, чтобы в результате какого-то события у кнопки менялся цвет её контура и её фона?
Есть ли такие методы у класса CButton или же нужно создавать класс-потомок от него, в котором нужно переопределять методы?

PM MAIL   Вверх
erslgoeirjh
Дата 26.10.2016, 13:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 147
Регистрация: 16.12.2005

Репутация: нет
Всего: нет



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

/
Код

/ файл 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\atlmfc\src\mfc\wincore.cpp

Line:691



Что это означает? Как исправить эту ошибку?
(Я работаю в MS Visual C++ 2012, операционная система Windows 7).

PM MAIL   Вверх
vol4ek
Дата 14.11.2016, 22:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


конь в пальто
**


Профиль
Группа: Участник
Сообщений: 304
Регистрация: 1.5.2011
Где: Минск

Репутация: -1
Всего: 0



научись мастером пользоваться раз MFC юзаешь. обработка сообщений и тд. в окне свойств вкладки события и сообщения.
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема »


 




[ Время генерации скрипта: 0.1022 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.