Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Visual C++/MFC/WTL > Цвет static на диалоговой панели |
Автор: sarmatik 7.2.2016, 20:12 | ||||||||
// textDlg.h : header file // #if !defined(AFX_TEXTDLG_H__7279D624_D16F_4DDC_A5DC_7911EFDAE533__INCLUDED_) #define AFX_TEXTDLG_H__7279D624_D16F_4DDC_A5DC_7911EFDAE533__INCLUDED_ #if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000 #include "ColorStatic.h" ///////////////////////////////////////////////////////////////////////////// // CTextDlg dialog class CTextDlg : public CDialog { // Construction public: CTextDlg(CWnd* pParent = NULL); // standard constructor //CColorStatic m_Text; // Dialog Data //{{AFX_DATA(CTextDlg) enum { IDD = IDD_TEXT_DIALOG }; // NOTE: the ClassWizard will add data members here //}}AFX_DATA // ClassWizard generated virtual function overrides //{{AFX_VIRTUAL(CTextDlg) protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support //}}AFX_VIRTUAL // Implementation protected: HICON m_hIcon; CColorStatic m_Text; // Generated message map functions //{{AFX_MSG(CTextDlg) virtual BOOL OnInitDialog(); afx_msg void OnPaint(); afx_msg HCURSOR OnQueryDragIcon(); //}}AFX_MSG DECLARE_MESSAGE_MAP() }; //{{AFX_INSERT_LOCATION}} // Microsoft Visual C++ will insert additional declarations immediately before the previous line. #endif // !defined(AFX_TEXTDLG_H__7279D624_D16F_4DDC_A5DC_7911EFDAE533__INCLUDED_)
// ColorStatic.cpp : implementation file // #include "stdafx.h" #include "ColorStatic.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CColorStatic CColorStatic::CColorStatic() { m_TextColor=RGB(11,1,111); } CColorStatic::~CColorStatic() { } BEGIN_MESSAGE_MAP(CColorStatic, CStatic) //{{AFX_MSG_MAP(CColorStatic) ON_WM_CREATE() ON_WM_PAINT() //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CColorStatic message handlers int CColorStatic::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (CStatic::OnCreate(lpCreateStruct) == -1) return -1; // TODO: Add your specialized creation code here return 0; } void CColorStatic::OnPaint() { CPaintDC dc(this); // device context for painting // TODO: Add your message handler code here CRect rect; GetClientRect(&rect); dc.SetBkColor(m_BackColor); dc.SetBkMode(TRANSPARENT); CFont *pFont=GetParent()->GetFont(); CFont *pOldFont; pOldFont=dc.SelectObject(pFont); dc.SetTextColor(m_TextColor); dc.DrawText(m_strCaption,&rect,DT_CENTER); dc.SelectObject(pOldFont); // Do not call CStatic::OnPaint() for painting messages } void CColorStatic::Create(CString strCaption, COLORREF BackColor) { } void CColorStatic::SetCaption(CString strCaption) { m_strCaption=strCaption; } void CColorStatic::SetBackColor(COLORREF BackColor) { m_BackColor=BackColor; } void CColorStatic::SetTextColor(COLORREF TextColor) { m_TextColor=TextColor; }
|
Автор: sarmatik 9.2.2016, 08:49 |
Ошибок нет. И цвета тоже нет. После ввода DDX в Dlg.cpp static исчезает. |
Автор: YDean 9.2.2016, 22:36 |
для раскраски диалоговых элементов обычно используют перехват WM_CTLCOLOR / WM_CTLCOLORSTATIC |
Автор: sarmatik 9.2.2016, 23:44 |
Можно чуть подробнее ? |
Автор: YDean 10.2.2016, 12:19 | ||
|
Автор: sarmatik 10.2.2016, 19:56 |
Это для Win32 Application или Win API ? У меня в AppWizard[exe] диалоговая панель. Просто на панель текст в цвете вывожу, а static с цветным текстом не получается. Мне надо как-то приспособить приведенные коды к этому варианту. Не знаю, справлюсь ли. |
Автор: sarmatik 11.2.2016, 17:44 |
Задам вопрос по-другому. Как для диалогового приложения создать обработчик сообщения. Не очень понимаю. |
Автор: sarmatik 11.2.2016, 18:57 |
Почему-то статика вообще не видно - ни цветного, ни бесцветного. |
Автор: sarmatik 11.2.2016, 19:46 |
Мне нужно закрасить цвет текста статика. Статик почему-то вообще невидим становится после того как его определил как control. |
Автор: sarmatik 11.2.2016, 20:59 |
Достаточно было убрать DDX и все у меня появилось. Вот что значит нельзя пользоваться чужими примерами. В них могут быть ошибки. |
Автор: sarmatik 11.2.2016, 21:20 |
YDean, спасибо за помощь. Помогло. |
Автор: sarmatik 12.2.2016, 07:45 |
Убрал DDX_Control(pDX, IDC_TEXT, m_Text); |