- 締切済み
FlexGridのセル内文字を点滅させる方法
VC++2005のMFC環境でFlexGridを使用しています。 SetTextMatrix関数にて、セル内に挿入した文字に対し、 点滅させ表示したいのですが、 何か良い方法などありましたら、ご教示お願い致します。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- machongola
- ベストアンサー率60% (434/720)
こんにちは。 「フォントの点滅」とは、リアルタイムにフォントが点滅すると言う事でしょうか(ゲームみたいに)。 手法の良し悪しは別として、OnTimer()でセルのフォント色を交互に切り替えれば、簡単に表現出来ます。以下参考程度に。 //ヘッダに以下のメンバ変数を追加 class CTestDlg { bool m_bBlink;//点滅フラグ CArray<CPoint, CPoint&> m_ptArray;//セル位置の配列 CMSFlexGrid m_flexGrid; }; //ウィンドウやダイアログの初期化 BOOL CTestDlg::OnInitDialog() { //セル初期化用の使い捨て構造体 struct CInitData { CInitData(long x, long y, const CString& string) : point(x, y), string(string){ } CPoint point;//セルの位置 CString string;//セルの文字 } data[] = { CInitData(1, 1, "点滅テスト1-1"), CInitData(2, 2, "点滅テスト2-2"), }; for(int n = 0; n < 2; ++n) { m_ptArray.Add(data[n].point); m_flexGrid.SetTextMatrix(data[n].point.x, data[n].point.y, data[n].string); } //取り敢えずタイマーを0.25秒辺りでセット this->SetTimer(1000, 250, NULL); }; //タイマー void CTestDlg::OnTimer(UINT nIDEvent) { // TODO: この位置にメッセージ ハンドラ用のコードを追加するかまたはデフォルトの処理を呼び出してください m_bBlink ^= true; for(int n = 0; n < m_ptArray.GetSize(); ++n) { m_flexGrid.SetCol(m_ptArray[n].x); m_flexGrid.SetRow(m_ptArray[n].y); //フォントの白黒点滅 m_flexGrid.SetForeColor(m_bBlink ? 0x0 : 0xffffff); } CDialog::OnTimer(nIDEvent); }
お礼
ご回答ありがとうございます。 なるほど、OnTimerを用いて文字色を反転させれば良いのですね。 参考にさせていただきます。ありがとうございました。