| 18.フォントの種類、色、大きさを指定するダイアログ、ダイアログクラスを作成する。 |
手っ取り早く言ってしまえば、第6-2章の最後でもお見せした、右のダイアログを作成してしまいます。このダイアログを作ることによって、こんなことが可能になります。
| 19.メンバ変数を割り当てる |
/////////////////////////////////////////////////////////////////////////////
// CDlgSetFont ダイアログ
class CDlgSetFont : public CDialog
{
// コンストラクション
public:
BOOL m_bColor; // ここを追加
BOOL m_bFont; // ここを追加
BOOL m_bSize; // ここを追加
CDlgSetFont(CWnd* pParent = NULL); // 標準のコンストラクタ
|
CDlgSetFont::CDlgSetFont(CWnd* pParent /*=NULL*/)
: CDialog(CDlgSetFont::IDD, pParent)
{
m_bColor = false;
m_bFont = false;
m_bSize = false;
//{{AFX_DATA_INIT(CDlgSetFont)
m_strColor = _T("");
m_strFont = _T("");
m_nFontSize = 4;
//}}AFX_DATA_INIT
}
|
| 19.ダイアログの動作を決める |
void CDlgSetFont::OnFontCheckCol()
{
CEdit* pEdt = (CEdit*)GetDlgItem(IDC_FONT_EDT_COL);
if(!m_bColor){
pEdt->SetReadOnly(false);
m_bColor = true;
}
else{
m_bColor = false;
pEdt->SetReadOnly(true);
}
}
void CDlgSetFont::OnFontCheckFont()
{
if(!m_bFont)
m_bFont = true;
else
m_bFont = false;
}
void CDlgSetFont::OnFontCheckSize()
{
if(!m_bSize)
m_bSize = true;
else
m_bSize = false;
}
|
void CDlgSetFont::OnSetFont()
{
if(!m_bFont){return;}
CFontDialog cDlg(NULL, CF_SCREENFONTS|CF_INITTOLOGFONTSTRUCT,NULL,NULL);//FONTダイアログ
if (cDlg.DoModal() != IDOK){return ;}
m_strFont = cDlg.GetFaceName();
UpdateData(false);
}
void CDlgSetFont::OnSetColor()
{
if(!m_bColor){return;}
m_strColor = GetColorString();
UpdateData(false);
}
|
// インクルードファイル ←インクルードしておく
#include "DlgSetFont.h"
//フォントの設定ダイアログ
void CMyHtmlView::OnInsFont()
{
CDlgSetFont cDlg;
if(cDlg.DoModal()!=IDOK){return ;}
}
|
ですね。CSpinButtonCtrlクラスが存在するのですが、ここでは別にクラスを作るほどでもないのでもう少し簡単な方法で実装していきます。具体的な動作はこんな感じです。
//フォント サイズ スピンコントロール
void CDlgSetFont::OnFontSpinSize(NMHDR* pNMHDR, LRESULT* pResult)
{
NM_UPDOWN* pNMUpDown = (NM_UPDOWN*)pNMHDR;
// Flag
if(!m_bSize){return;}
// Up
if(pNMUpDown->iDelta != 1){
if(m_nFontSize != 7){
m_nFontSize++;
UpdateData(false);
}
else AfxMessageBox("フォントサイズは1〜7で指定してください");
}
// Down
else{
if(m_nFontSize != 1){
m_nFontSize--;
UpdateData(false);
}
else AfxMessageBox("フォントサイズは1〜7で指定してください");
}
*pResult = 0;
}
|
if(pNMUpDown->iDelta != 1){
if(m_nFontSize != 7){
m_nFontSize++;
UpdateData(false);
}
else AfxMessageBox("フォントサイズは1〜7で指定してください");
}
else{
if(m_nFontSize != 1){
m_nFontSize--;
UpdateData(false);
}
else AfxMessageBox(IDS_ERROR_FONT);
}
| 20.タグ生成コードを作成する |
//フォントの設定ダイアログ
void CMyHtmlView::OnInsFont()
{
CString strSel; //選択されている文字列
CDlgSetFont cDlg;
if(cDlg.DoModal()!=IDOK){return ;}
/* 現在選択されている文字列を取得 */
CEdit& cEdt = GetEditCtrl();
cEdt.Copy();
strSel = GetClipBoard();
cDlg.MakeTag(strSel); //タグの生成
PasteString(cDlg.strTag); //作成したタグ付文字列をペースト
SetFocus(); //フォーカスを設定する
}
|
/////////////////////////////////////////////////////////////////////////////
// CDlgSetFont ダイアログ
class CDlgSetFont : public CDialog
{
// コンストラクション
public:
BOOL m_bColor;
BOOL m_bFont;
BOOL m_bSize;
void MakeTag(CString str); // ここを追加
CString strTag; // ここを追加
CDlgSetFont(CWnd* pParent = NULL); // 標準のコンストラクタ
|
// CDlgSetFont::MakeTag(CString) タグの生成
void CDlgSetFont::MakeTag(CString strIns)
{
CString strTagA,strTagB,cTemp;
strTagA = "<FONT";
if(m_bSize){
cTemp.Format("%d",m_nFontSize);
strTagA += " SIZE=";
strTagA += cTemp;
}
if(m_bColor){
strTagA += " COLOR=\"";
strTagA += m_strColor;
strTagA += "\"";
}
if(m_bFont){
strTagA += " FACE=\"";
strTagA += m_strFont;
strTagA +="\"";
}
strTagA += ">";
strTagB = "</FONT>";
strTag = strTagA + strIns + strTagB;
}
|


