ちょっといろいろ試してみましたが、ActiveXの場合ボタンをオーナードロースタイルにして、自分で描いてやる必要がありそうです。
手順としては
1)ボタン作成の際のスタイルに「BS_OWNERDRAW」を追加
2)コントロールクラスに「OnDrawItem」イベントハンドラを追加
3)OnDrawItem内で、引数のコントロールIDが対象のボタンか判断して、対象のボタンならデバイスコンテキストに描画をしてやる
ということになりますが、オーナードローだと、描画全てをコードで記述してやらないといけません。
色はもちろん、表示するテキスト、ボタン枠(3D効果が必要なら効果も)、ボタンの状態によって、変化する部分(無効の場合、フォーカスが当たった場合、ボタンを押された場合のなど)も自力で描画します。
下記に参考サイトのソースをベースに、色を変えるところまで記述したコードを載せますので、あとはいろいろ研究してみてください。
C++
1// CCustomControlCtrl.h
2
3 // メッセージマップに追加
4 afx_msg void OnDrawItem(int nIDCtl, LPDRAWITEMSTRUCT lpDrawItemStruct);
5
6 // メンバ変数に追加
7 CBrush m_Brush;
8 CButton* m_pButton1;
C++
1// CCustomControlCtrl.cpp
2
3// メッセージ マップ
4BEGIN_MESSAGE_MAP(CCustomControlCtrl, COleControl)
5 ON_OLEVERB(AFX_IDS_VERB_PROPERTIES, OnProperties)
6 ON_COMMAND(IDC_BUTTON1, CCustomControlCtrl::OnButton1)
7 ON_WM_CREATE()
8 ON_WM_DRAWITEM()
9END_MESSAGE_MAP()
10
11// イベントハンドラ
12int CCustomControlCtrl::OnCreate(LPCREATESTRUCT lpCreateStruct)
13{
14 if (COleControl::OnCreate(lpCreateStruct) == -1)
15 return -1;
16
17 // TODO: ここに特定な作成コードを追加してください。
18 m_pButton1 = new CButton();
19 m_pButton1->Create(L"ボタン1", BS_PUSHBUTTON | BS_OWNERDRAW | WS_VISIBLE, CRect(0,0,99,99), this, IDC_BUTTON1);
20 // ブラシの作成(ボタン背景色:赤)
21 m_Brush.CreateSolidBrush(RGB(255,0,0));
22
23 return 0;
24}
25
26void CCustomControlCtrl::OnDrawItem(int nIDCtl, LPDRAWITEMSTRUCT lpDrawItemStruct)
27{
28 // TODO: ここにメッセージ ハンドラ コードを追加するか、既定の処理を呼び出します。
29 if (lpDrawItemStruct->CtlType == ODT_BUTTON) {
30 if (nIDCtl == IDC_BUTTON1) {
31 CDC dc;
32 dc.Attach(lpDrawItemStruct->hDC);
33 CRect rect(lpDrawItemStruct->rcItem);
34 // ボタン背景色を赤に
35 dc.FillRect(rect, &m_Brush);
36 dc.Detach();
37 return;
38 }
39 }
40 COleControl::OnDrawItem(nIDCtl, lpDrawItemStruct);
41}
42