2006年02月10日

ヘッダーファイルなどの,多重インクルードの防ぎ方

このサイトが参考になる
http://www.c3.club.kyutech.ac.jp/~sukiyaki/vc/pragma.html#taju
posted by agsato at 13:39| 東京 晴れ| Comment(6) | TrackBack(0) | Visual C++ | このブログの読者になる | 更新情報をチェックする

DLLの作り方

posted by agsato at 13:38| 東京 晴れ| Comment(0) | TrackBack(0) | Visual C++ | このブログの読者になる | 更新情報をチェックする

2006年02月08日

プログラムを終了する

AfxGetMainWnd()->PostMessage(WM_CLOSE);
posted by agsato at 15:08| 東京 晴れ| Comment(0) | TrackBack(0) | Visual C++ | このブログの読者になる | 更新情報をチェックする

クラスにstaticメンバを含める方法

Javaと同じ感覚でstaticメンバを含めることが出来ないので少々戸惑う.
ただクラスの定義に含めるだけでなく,staticなグローバル変数を任意の
クラスだけで使用可能にする,という形でstaticメンバを含めるのが
どうやらC++での考え方のようだ.

具体的には,まずクラスの定義(***.h)でstaticメンバを記述し,
class CHogeClass {
private:
static BOOL IsFirstBuilt;
...
}

次にクラスの実装(***.cpp)でグローバル変数を初期化する
#include "CHogeClass.h"
BOOL CHogeClass::IsFirstBuilt = TRUE;


posted by agsato at 11:25| 東京 晴れ| Comment(0) | TrackBack(0) | Visual C++ | このブログの読者になる | 更新情報をチェックする

CFormViewの背景色を変更

このサイトが参考になる
http://uzgalaxy.com/plalaboard/message/967.html
posted by agsato at 15:58| 東京 霧| Comment(0) | TrackBack(0) | Visual C++ | このブログの読者になる | 更新情報をチェックする

Windows API によるJPEGロード法

このサイトが参考になる

[JPEGロード法]
http://crafts.jp/~al/p_jpegread.html
posted by agsato at 15:56| 東京 霧| Comment(0) | TrackBack(0) | Visual C++ | このブログの読者になる | 更新情報をチェックする

コントロールよりも先にメッセージを取得する

CButtonクラスやCEditクラスなどのコントロールをViewに配置しているとき,
コントロール上を左クリックした動作を検出したくてもできません.

つまり,ViewでOnLButtonDown()を実装していてもメッセージが送られてこない
んですね.

どうしてもメッセージを取得したいときは,ViewクラスにPreTranslateMessage()を
実装してあげることでメッセージを取得できるようになります.



BOOL CInputView::PreTranslateMessage(MSG* pMsg)
{
if (pMsg->message == WM_CHAR)
{
// 画像ファイル名の読み取り(キー入力から)
if (pMsg->wParam == 13)
{
m_stNewPicture += _T(".jpg");
m_stNewPicture += _T("\0");

TRACE(_T("\nnew picture = %s\n\n"), m_stNewPicture);
// 新しい画像の読み込みに失敗
if (ChangePicture() == FALSE)
{
AfxMessageBox(_T("画像の読み込みに失敗しました."));
}
}
else
{
TCHAR tc;
tc = pMsg->wParam;
m_stNewPicture += tc;
}

TRACE(_T("m_stNewPicture = %s\n"), m_stNewPicture);
return TRUE;
}

if (pMsg->message == WM_LBUTTONDOWN)
{
OnLButtonDown((UINT)pMsg->wParam, (CPoint)pMsg->lParam);
}

return CFormView::PreTranslateMessage(pMsg);
}

posted by agsato at 15:54| 東京 霧| Comment(0) | TrackBack(0) | Visual C++ | このブログの読者になる | 更新情報をチェックする

2006年01月31日

AppWizardで生成されたビュークラスをコピーする方法

なにぶん,MFCを初めて間もないため,あれこれやりたくてもまだかってがわから
ない.AppWizardで印刷機能を付加してViewを生成してくれるのは嬉しいけど,
自分で追加したViewには印刷機能が付いていないんです.

手動で追加する方法はまだ分からないので,ひとまずは自動生成されるビューを
上手くコピーしてViewを増やそうと思います.ちなみにCFormViewを継承している
Viewをコピーする場合の話です.


<1> ***View.h と ***View.cpp を普通にコピーする
<2> 文字列の置換機能で,「C***View」を任意のクラス名に変更
(置換のポイントは,Cを除いた "***View" で行うこと)
<3> ***View.h の 「enum{ IDD = IDD_INPUT_FORM };」 の部分を変更
<4> ***View.h の 「AFX_***VIEW_H__A2BA0562_FCB3_425F_BAB9_FDE55AEF3FFB
__INCLUDED_」のクラス名を変更
<5> C***App の cpp の InitInstance() 中の 「RUNTIME_CLASS(C***View));」
を変更
<6> C***App の cpp に 追加したビューのヘッダをインクルードする
<7> VC++を落とし,追加した.hと.cppを別の場所に移す
<8> ClassWizardで同名のクラスを追加する
<9> VC++を落とし,別の場所に移したファイルで上書きする


一応この手順を踏めば,印刷機能も使えるし,ClassWizardからメッセージ
ハンドラの割付などもできます.

# 正しい手順を示してくれるという奇特な方がいらっしゃったら,
# 是非コメント下さい.
posted by agsato at 18:51| 東京 雨| Comment(0) | TrackBack(0) | Visual C++ | このブログの読者になる | 更新情報をチェックする

広告


この広告は60日以上更新がないブログに表示がされております。

以下のいずれかの方法で非表示にすることが可能です。

・記事の投稿、編集をおこなう
・マイブログの【設定】 > 【広告設定】 より、「60日間更新が無い場合」 の 「広告を表示しない」にチェックを入れて保存する。