ipx , PartsA , PartsA_C3D
2012/04/25 以前の PartsA などの ipx の読込みは,CArchive::ReadString を利用していた.
今回,Parts ファミリのファイルアクセスは,LoadText ,SaveText に置き換える.
ReadString を利用していた時の動作
PartsA_C3D::ImportTxt より PartsA::SerializeTxt が呼ばれる.
PACnv3.exe!PartsA::SerializeTxt(CArchive & ar={…}) 行 464
PACnv3.exe!PartsA::Serialize(CArchive & ar={…}) 行 361
PACnv3.exe!PartsA_C3D::ImportTxt(… * pathName) 行 336
PACnv3.exe!PartsA_C3D::Import(… * pathName) 行 137
PACnv3.exe!CPACnv3Doc::OnOpenDocument(… * lpszPathName) 行 177
PartsA_C3D::ImportTxt で,exe と ipx の種類により,ReadString で読める形式でコピーする.
FileMBWC.hxx GetReadTextName により,
UNICODE.exe の場合,UTF-16 のテキストファイルにコピーする.
PartsA::Serialize を呼出す前には,BOM を読み飛ばした位置にポインタがある.
FileMBWC.hxx SerializeTextBOM(ar) により,UNICODE.exe の場合に飛ばす.
* PartsA_C3D を利用してない exe では,形式が異なるファイルは読み出せなかった.
VxxxxV などの exe は,PartsA::Serialize としているのでこれにあたる.
ReadString を利用しない様にしたので,PartsA_C3D::ImportTxt は,シンプルになった.
BOOL PartsA_C3D::ImportTxt (LPCTSTR pathName)
{
if (!PartsA::IsTextFile(pathName)) { return FALSE ; }
CString str ;
if (!::LoadText(pathName,str)) { return FALSE ; }
return PartsA::ImportTxt(str) ;
}
HTML の表示
SVG をダイアログ上に表示したくなったので,CHtmlView などを利用してみた.
Spy++ で見ると,クラス名が “Internet Explorer_Server” となる.
HtmlView.zip
SDI で CHtmlView を利用
1. AppWizard のステップ 6 で,CHtmlView を選択する.
2. ビューのソースの CXxxxView::OnInitialUpdate() を,適当なアドレスに修正する.
Navigate2(_T(“https://mish.myds.me/wordpress/dev/“),NULL,NULL);
ダイアログで,WebBrowser Control を利用
1. プロジェクトにコンポーネントを追加する.
2. 追加したコントロールの変数を割り当てる(ここでは,m_WebBrowse とした).
3. OnInitDialog などで
m_WebBrowse.Navigate(_T(“https://mish.myds.me/wordpress/dev/“),NULL,NULL,NULL,NULL) ;
ダイアログで,CHtmlView を利用
1. CHtmlView* の変数を定義する(ここでは,WebView とした).
2. OnInitDialog で
CRect rect ;
GetClientRect(&rect) ;
rect.top = 25 ;
CRuntimeClass* pClass= RUNTIME_CLASS(CHtmlView) ;
WebView = (CHtmlView*)(pClass->CreateObject()) ;
WebView->Create(NULL,NULL,WS_VISIBLE|WS_CHILD,rect,this,0,NULL) ;
WebView->SendMessage(WM_INITIALUPDATE) ;
WebView->Navigate(_T(“https://mish.myds.me/wordpress/dev/“)) ;
コード分析による修正
VC 9
~\CharFnc.hxx(155) : warning C6284: オブジェクトがパラメータ '3' として渡されました。 ~\CharFnc.hxx(155) : warning C6284: オブジェクトがパラメータ '5' として渡されました。 str.Format(_T("(%*s,%*s)"),width, ToString(value.x) ,width, ToString(value.y) ) ; str.Format(_T("(%*s,%*s)"),width,LPCTSTR(ToString(value.x)),width,LPCTSTR(ToString(value.y))) ; 間違って LPCSTR としてしまうと,_UNICODE では error C2440: '' : 'CString' から 'LPCSTR' に変換できません。 LPSTR としてしまうと, error C2440: '' : 'CString' から 'LPSTR' に変換できません。