Цвет кнопки.
От: TomRay  
Дата: 10.06.02 05:30
Оценка:
Всем привет.
Мне нужно сделать кнопку с заданным цветом фона. Для этого я использую OnCtlColor. Но что-то не работает. Кто-нибудь знает в чем дело?

HBRUSH CMyDialog::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);

if (pWnd->GetDlgCtrlID() == IDC_BUTTON_ONE)
{
pDC->SetBkColor(RGB(255, 0, 0));
CBrush tmpBr(RGB(255,0,0));
hbr = (HBRUSH)tmpBr;
}

return hbr;

}

Буду очень благодарен за работающую функцию.

Заранее СПАСИБО.
Re: Цвет кнопки.
От: Аноним  
Дата: 10.06.02 05:35
Оценка:
Здравствуйте TomRay, Вы писали:

TR>Всем привет.

TR>Мне нужно сделать кнопку с заданным цветом фона. Для этого я использую OnCtlColor. Но что-то не работает. Кто-нибудь знает в чем дело?

TR>HBRUSH CMyDialog::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)

TR>{
TR> HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
TR>
TR> if (pWnd->GetDlgCtrlID() == IDC_BUTTON_ONE)
TR> {
TR> pDC->SetBkColor(RGB(255, 0, 0));
TR> CBrush tmpBr(RGB(255,0,0));
TR> hbr = (HBRUSH)tmpBr;
TR> }

TR> return hbr;


Созданная тобой кисть умирает при выходе из if-блока (dtor ее мочит).

-Илья
zarezky@mail.ru

TR>}


TR>Буду очень благодарен за работающую функцию.


TR>Заранее СПАСИБО.
Re[2]: Цвет кнопки.
От: TomRay  
Дата: 10.06.02 05:57
Оценка:
Здравствуйте Аноним, Вы писали:

А>Созданная тобой кисть умирает при выходе из if-блока (dtor ее мочит).


Все равно не работает.
Re[3]: Цвет кнопки.
От: Elijah Zarezky Россия https://zarezky.spb.ru/
Дата: 10.06.02 05:58
Оценка:
Здравствуйте TomRay, Вы писали:

TR>Здравствуйте Аноним, Вы писали:


А>>Созданная тобой кисть умирает при выходе из if-блока (dtor ее мочит).


TR>Все равно не работает.


А как ты теперь пишешь?
- Искренне ваш, Поросенок Пафнутий
Re[3]: Цвет кнопки.
От: Elijah Zarezky Россия https://zarezky.spb.ru/
Дата: 10.06.02 06:01
Оценка:
Здравствуйте TomRay, Вы писали:

TR>Здравствуйте Аноним, Вы писали:


А>>Созданная тобой кисть умирает при выходе из if-блока (dtor ее мочит).


TR>Все равно не работает.


Тебе нужно обрабатывать сообщение WM_CTLCOLORBTN, а не WM_CTLCOLOR — оно работало под Win16, насколько я помню...
- Искренне ваш, Поросенок Пафнутий
Re[4]: Цвет кнопки.
От: Аноним  
Дата: 10.06.02 06:04
Оценка:
Здравствуйте Elijah Zarezky, Вы писали:

EZ>А как ты теперь пишешь?


В MyDialog.h

protected:
HBRUSH tmpBr;

В MyDialog.cpp

В конструкторе:

tmpBr = CreateSolidBrush(RGB(255,0,0));

и далее

HBRUSH CMyDialog::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
if (pWnd->GetDlgCtrlID() == IDC_BUTTON_ONE)
{
pDC->SetBkColor(RGB(255, 0, 0));
hbr = tmpBr;
}

return hbr;

}
Re[4]: Цвет кнопки.
От: TomRay  
Дата: 10.06.02 06:08
Оценка:
Здравствуйте Elijah Zarezky, Вы писали:

EZ>Тебе нужно обрабатывать сообщение WM_CTLCOLORBTN, а не WM_CTLCOLOR — оно работало под Win16, насколько я помню...


Что-то его в ClassWizarde нет.
Re[5]: Цвет кнопки.
От: Elijah Zarezky Россия https://zarezky.spb.ru/
Дата: 10.06.02 06:13
Оценка:
Здравствуйте TomRay, Вы писали:

TR>Здравствуйте Elijah Zarezky, Вы писали:


EZ>>Тебе нужно обрабатывать сообщение WM_CTLCOLORBTN, а не WM_CTLCOLOR — оно работало под Win16, насколько я помню...


TR>Что-то его в ClassWizarde нет.


ClassWizard — отстой, в нем трети сообщений нету, попробуй перекрыть виртуальный WindowProc() и обработать его там.
- Искренне ваш, Поросенок Пафнутий
Re[5]: Цвет кнопки.
От: Elijah Zarezky Россия https://zarezky.spb.ru/
Дата: 10.06.02 06:17
Оценка:
Здравствуйте TomRay, Вы писали:

TR>Здравствуйте Elijah Zarezky, Вы писали:


EZ>>Тебе нужно обрабатывать сообщение WM_CTLCOLORBTN, а не WM_CTLCOLOR — оно работало под Win16, насколько я помню...


TR>Что-то его в ClassWizarde нет.


А еще можно в stdafx.h загнать вот такой дифайн:

#define ON_WM_CTLCOLORBTN() { WM_CTLCOLORBTN, 0, 0, 0, AfxSig_hDWw, (AFX_PMSG)(AFX_PMSGW)(HBRUSH (AFX_MSG_CALL CWnd::*)(CDC*, CWnd*, UINT))&OnCtlColorBtn },

переименовать уже имеющийся у тебя метод OnCtlColor() в OnCtlColorBtn() и вогнать ON_WM_CTLCOLORBTN() в message map после строки //}}AFX_MSG_MAP
- Искренне ваш, Поросенок Пафнутий
Re[6]: Цвет кнопки.
От: TomRay  
Дата: 10.06.02 06:24
Оценка:
Здравствуйте Elijah Zarezky, Вы писали:
EZ>#define ON_WM_CTLCOLORBTN() { WM_CTLCOLORBTN, 0, 0, 0, AfxSig_hDWw, (AFX_PMSG)(AFX_PMSGW)(HBRUSH (AFX_MSG_CALL CWnd::*)(CDC*, CWnd*, UINT))&OnCtlColorBtn },

EZ>переименовать уже имеющийся у тебя метод OnCtlColor() в OnCtlColorBtn() и вогнать ON_WM_CTLCOLORBTN() в message map после строки //}}AFX_MSG_MAP


Ошибки:

Compiling...
StdAfx.cpp
e:\projects\dnutview\stdafx.h(16) : error C2447: missing function header (old-style formal list?)
e:\projects\dnutview\stdafx.h(16) : error C2017: illegal escape sequence
Error executing cl.exe.
Re[7]: Цвет кнопки.
От: Elijah Zarezky Россия https://zarezky.spb.ru/
Дата: 10.06.02 06:29
Оценка:
Здравствуйте TomRay, Вы писали:

TR>Здравствуйте Elijah Zarezky, Вы писали:

EZ>>#define ON_WM_CTLCOLORBTN() { WM_CTLCOLORBTN, 0, 0, 0, AfxSig_hDWw, (AFX_PMSG)(AFX_PMSGW)(HBRUSH (AFX_MSG_CALL CWnd::*)(CDC*, CWnd*, UINT))&OnCtlColorBtn },

EZ>>переименовать уже имеющийся у тебя метод OnCtlColor() в OnCtlColorBtn() и вогнать ON_WM_CTLCOLORBTN() в message map после строки //}}AFX_MSG_MAP


TR>Ошибки:


TR>Compiling...

TR>StdAfx.cpp
TR>e:\projects\dnutview\stdafx.h(16) : error C2447: missing function header (old-style formal list?)
TR>e:\projects\dnutview\stdafx.h(16) : error C2017: illegal escape sequence
TR>Error executing cl.exe.

Слушай, а пришли мне на мыло свой stdafx.h
- Искренне ваш, Поросенок Пафнутий
Re[8]: Цвет кнопки.
От: TomRay  
Дата: 10.06.02 06:36
Оценка:
Здравствуйте Elijah Zarezky, Вы писали:
EZ>Слушай, а пришли мне на мыло свой stdafx.h

#if !defined(AFX_STDAFX_H__B8959E5B_1B25_4078_9D2A_EF1AD17E0617__INCLUDED_)
#define AFX_STDAFX_H__B8959E5B_1B25_4078_9D2A_EF1AD17E0617__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

// stdafx.h : include file for standard system include files,
// or project specific include files that are used frequently,
// but are changed infrequently

#define VC_EXTRALEAN // Exclude rarely-used stuff from Windows headers

#include <afxctl.h> // MFC support for ActiveX Controls
#include <afxext.h> // MFC extensions
#include <afxdtctl.h> // MFC support for Internet Explorer 4 Comon Controls
#ifndef _AFX_NO_AFXCMN_SUPPORT
#include <afxcmn.h> // MFC support for Windows Common Controls
#endif // _AFX_NO_AFXCMN_SUPPORT

// Delete the two includes below if you do not wish to use the MFC
// database classes
#include <afxdb.h> // MFC database classes
#include <afxdao.h> // MFC DAO database classes
#include <afxtempl.h>

#include <sys/timeb.h>
#include <malloc.h>
#include <memory.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>


#define ON_WM_CTLCOLORBTN() { WM_CTLCOLORBTN, 0, 0, 0, AfxSig_hDWw, (AFX_PMSG)(AFX_PMSGW)(HBRUSH (AFX_MSG_CALL CWnd::*)(CDC*, CWnd*, UINT))&OnCtlColorBtn }


//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.

#endif // !defined(AFX_STDAFX_H__B8959E5B_1B25_4078_9D2A_EF1AD17E0617__INCLUDED_)
Re[7]: Цвет кнопки.
От: Elijah Zarezky Россия https://zarezky.spb.ru/
Дата: 10.06.02 06:43
Оценка:
Здравствуйте TomRay, Вы писали:

TR>Здравствуйте Elijah Zarezky, Вы писали:

EZ>>#define ON_WM_CTLCOLORBTN() { WM_CTLCOLORBTN, 0, 0, 0, AfxSig_hDWw, (AFX_PMSG)(AFX_PMSGW)(HBRUSH (AFX_MSG_CALL CWnd::*)(CDC*, CWnd*, UINT))&OnCtlColorBtn },

EZ>>переименовать уже имеющийся у тебя метод OnCtlColor() в OnCtlColorBtn() и вогнать ON_WM_CTLCOLORBTN() в message map после строки //}}AFX_MSG_MAP


TR>Ошибки:


TR>Compiling...

TR>StdAfx.cpp
TR>e:\projects\dnutview\stdafx.h(16) : error C2447: missing function header (old-style formal list?)
TR>e:\projects\dnutview\stdafx.h(16) : error C2017: illegal escape sequence
TR>Error executing cl.exe.

Ты забыл запятую после закрывающей фигурной скобки — а у меня она была см. Re[6]
- Искренне ваш, Поросенок Пафнутий
Re[8]: Цвет кнопки.
От: TomRay  
Дата: 10.06.02 07:02
Оценка:
Здравствуйте Elijah Zarezky, Вы писали:

EZ>Ты забыл запятую после закрывающей фигурной скобки — а у меня она была :-) см. Re[6]


Все компиляется, но появилась ран-тайм ошибка в WinCore (причем без захода в OnCtlColorBtn)
Re[9]: Цвет кнопки.
От: Elijah Zarezky Россия https://zarezky.spb.ru/
Дата: 10.06.02 07:07
Оценка:
Здравствуйте TomRay, Вы писали:

TR>Здравствуйте Elijah Zarezky, Вы писали:


EZ>>Ты забыл запятую после закрывающей фигурной скобки — а у меня она была см. Re[6]


TR>Все компиляется, но появилась ран-тайм ошибка в WinCore (причем без захода в OnCtlColorBtn)


Круто!! А может, извини за нахальство, ты мне весь проджект пришлешь на zarezky@mail.ru? А то так вслепую мне тяжко угадать, что там происходит...
- Искренне ваш, Поросенок Пафнутий
Re[10]: Цвет кнопки.
От: Аноним  
Дата: 10.06.02 07:11
Оценка:
Здравствуйте Elijah Zarezky, Вы писали:

EZ>Круто!! А может, извини за нахальство, ты мне весь проджект пришлешь на zarezky@mail.ru? А то так вслепую мне тяжко угадать, что там происходит...


Спасибо большое за помощь. Я нашел ошибку.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.