VC++

ホントにこれでいいのか疑問なコード

in

CEditBoxの幅を入力可能な文字数にあわせるとか、エディットボックス自体を右揃えにするなんてことは誰でも考えることだろうけど、皆どう実装しているんだろうか?僕は、

// Create Controll Font
m_ctrl_font.CreatePointFontIndirect(&logfont,pDC);
// Label A
tmpstr      = "LABEL A";
GetTextExtentPoint32(pDC->m_hDC,tmpstr.c_str(),tmpstr.length(),&textSize);
rect.top    = 20;
rect.left   = 20;
rect.bottom = rect.top  + (tm.tmExternalLeading + tm.tmHeight);
rect.right  = rect.left + textSize.cx;
CStatic* l = new CStatic;
l->Create(tmpstr.c_str(),SS_LEFT|WS_VISIBLE|WS_CHILD,rect,this);
l->SetFont(&m_ctrl_font);
// Edit A
int edge_w = GetSystemMetrics(SM_CXEDGE);
GetTextExtentPoint32(pDC->m_hDC,_T("1234567890"),10,&textSize);
rect.left   = rect.right + tm.tmMaxCharWidth;
edit_a_right = rect.right  = rect.left  + textSize.cx + (edge_w * 2);
CEdit* e = new CEdit;
e->CreateEx(WS_EX_STATICEDGE,_T("EDit"),"",
  ES_LEFT|WS_CHILD|WS_VISIBLE|WS_TABSTOP,rect,this,WM_USER+1);
e->SetFont(&m_ctrl_font);

みたいなコード(全ソース)を書いたりしていたのだけれどこれってかなり面倒。リソースエディタでペタペタ貼り付けて適当な大きさに並べておいてOnSize()あたりで幅を調整するのもありかと思うけどそれでも面倒な事は同じですよね?結局、コントロールの数だけ上記のようなコードをゴリゴリ書くわけです。

DLLの作成方法をすっかり忘れてた

in

久しぶり、DLLを作成。ちょっとハマっりました。VC++で作成したDLLの関数の呼び出し規則は、他言語からの呼び出し(CやVB)を考慮して__stdcallにするのが通例なんですけど、このあたりのことはもう遠い忘却の彼方ですっかり失念していました。メモしておかないとすぐに忘れてしまうので書いておきます。今日は丸一日これで時間をつぶしてしまいました。サイアクです。

VC++(MFC)でMSCHARTを操作する方法(2)

前回、グラフの初期状態まで描画したのでデータをセットします。といっても、初期値の代わりにちゃんとしたデータをセットするだけ。まず、適当なデータとアクセサをDocumentクラスに作成ます。ここでは仮に数量・金額・差額の3メンバをもつcchart_dataクラスを作成し、このクラスを格納するメンバ変数をDcoumentクラスに宣言しています。

VC++(MFC)関連の記事まとめ

in

VC++およびMFCに関する記事まとめ

この記事の一部をhippos-lab::net(別館)でまとめています。

VC++(MFC)でMSCHARTを操作する方法(1)

またまた、VCの仕事。ちょっと疲れましたよ。今度はデータを画面上でグラフ表示したいという案件。それこそ、エクセルでやればイイじゃんって思うのですが、その場でお客さんにみせたいとのこと....毎度毎度。そこで今度はVisualBasic付属のMSCHRT20.OCXを利用してFormViewにグラフを表示してみました。今回も情報が少なく手探りのコーディングで苦労しました。忘れないうちにメモを残します。

おおまかな手順はこんなカンジ。

VC++(MFC)でExcelを操作する方法(2)

前回は、セルに値を設定するところまで書いたので書式設定方法について補足します。前回書いた方法で値をセットしたエクセルを開いてみるとわかるのですが数値としてセルにセットした内容も文字列として表示されています。一度、セルを選択してダブルクリックするなどすれば数値として認識されるようですがこれは少し面白くありません。最初は、単にセルに書式を設定すればちゃんと数値扱いになるかななどとタカを括っていたのですが...

VC++(MFC)でExcelを操作する方法(1)

仕事で、久しぶりVC++をやることに。どうしても出力はExcelにして欲しいという要望があってかつての記憶を手繰りながら忘れないうちにメモ。長くなりそうなので、分割してアップします。

クラスの追加で「タイプライブラリからMFCクラスを作成」ExcelObjectライブラリを選択し、次のインタフェースをからクラスを生成します。(注意:Rangeクラスを生成しコンパイルするとVARIANT DialogBox()の箇所でエラーとなります。この部分はVARIANT CDialogBox()として対処しています。)

  • _Application
  • _Workbook
  • _Worksheet
  • Range
  • Workbooks
  • Worksheet
  • それぞれのクラスは名前のままエクセルのWorkbook(s)/Worksheet(s)/Rangeのラッパクラスとなります。また、各種関数を呼び出す際に使用するオプションパラメタは下記のように定義しています。

コンテンツの配信