21.やっぱりリソースをいじるのです |
22.メッセージをバインドしていきます |
<A HREF = "○○○○○○">〜</A>で記述され、この○○○○○○の中に
///////////////////////////////////////////////////////////////////////////// // CDlgSetLink メッセージ ハンドラ void CDlgSetLink::OnLnkRadioHttp() { m_strUrl = "http:"; UpdateData(false); } void CDlgSetLink::OnLnkRadioMail() { m_strUrl = "mailto:"; UpdateData(false); } void CDlgSetLink::OnLnkRadioFtp() { m_strUrl = "ftp:"; UpdateData(false); } |
// リンク void CMyHtmlView::OnInsLink() { CString strSel; CDlgSetLink cDlg; if(cDlg.DoModal()!=IDOK){return;} } |
BOOL CDlgSetLink::OnInitDialog() { CDialog::OnInitDialog(); m_strUrl = "http:"; m_btnCheck.SetCheck(1); UpdateData(false); return TRUE; // コントロールにフォーカスを設定しないとき、戻り値は TRUE となります // 例外: OCX プロパティ ページの戻り値は FALSE となります } |
void CDlgSetLink::OnLnkBtnUrl() { // Documentのポインタ CMyHtmlDoc* pDoc = GetMyDocument(); CString strBasePath; // 基準(現在開いているドキュメント)フルパス CString strFilePath; // リンクターゲットのフルパス // ファイルを開くダイアログ(コモンダイアログ) CString strFilter = "htmlファイル(*.html;*.htm)|*.html; *.htm|全てのファイル(*.*)|*.*||"; CFileDialog cDlg(true,NULL,NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,strFilter,NULL); if(cDlg.DoModal()!=IDOK){return;} // リンクターゲットのフルパス取得 strFilePath = cDlg.GetPathName(); // ドキュメントフルパスを取得 strBasePath = pDoc->GetPathName(); // 未保存のためドキュメントフルパスが取得できない場合 if(strBasePath.IsEmpty()){AfxMessageBox("ドキュメントを一度保存してください");return;} // 相対パスの計算 m_strUrl = GetRelativePath(strBasePath,strFilePath); UpdateData(false); } |
23.タグ生成コードを作成しよう |
class CDlgSetLink : public CDialog { // コンストラクション public: void MakeTag(CString strIns); // ここを追加 CString strTag; // ここを追加 CDlgSetLink(CWnd* pParent = NULL); // 標準のコンストラクタ // ダイアログ データ |
// タグの生成 void CDlgSetLink::MakeTag(CString strIns) { CString strTagA,strTagB; strTagA = "<A HREF=\""; strTagA += m_strUrl; strTagA += "\">"; strTagB = "</A>"; strTag = strTagA + strIns + strTagB; } |
strTagA += "\">";つまるところ、上の赤い"が文字列を識別するダブルクォーテーションで、緑色の"は「"」そのものということになります。
// リンク void CMyHtmlView::OnInsLink() { CString strSel; CDlgSetLink cDlg; if(cDlg.DoModal()!=IDOK){return;} CEdit& cEdt = GetEditCtrl(); cEdt.Copy(); strSel = GetClipBoard(); cDlg.MakeTag(strSel); PasteString(cDlg.strTag); SetFocus(); } |