Win32 Static Library の作成

  ユーザライブラリ ( ユーザ関数 )



1) Win32 Static Library を選択
2) ブロジェクト名を入力 ( 説明の為、ここでは lightbox とします )
3) プリコンパイル済みヘッダーをチェック

この時点では、ファイルは stdafx.h と stdafx.cpp しかありません。とりあえず通常の関数を作成しますが、管理上一つのクラスを作成します

1) クラスビュータブで、プロジェクト名を持つクラスを選択して右クリック
2) クラスの新規作成を選択
3) クラス名に MyClass と入力

ツリーに、MyClass が追加されます。その下の MyClass() をダブルクリックすると、MyClass.cpp が開かれますので、ここにユーザ関数を記述していきます。

ライブラリなので、リリースモードでコンパイルします

1) ビルドメニューのアクティブな構成の設定を選択
2) Win32 Release を選択して OK



  リストボックスに文字列を追加する関数



windows.h が必要です。stdafx.h に記述して下さい

  
// stdafx.h : 標準のシステム インクルード ファイル、
//            または参照回数が多く、かつあまり変更されない
//            プロジェクト専用のインクルード ファイルを記述します。
//

#if !defined(AFX_STDAFX_H__9FAD8622_ED3C_41D9_A60A_72BE81CFFA76__INCLUDED_)
#define AFX_STDAFX_H__9FAD8622_ED3C_41D9_A60A_72BE81CFFA76__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

#define WIN32_LEAN_AND_MEAN

#include <windows.h>

//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ は前行の直前に追加の宣言を挿入します。

#endif
  

  
// *********************************************************
// リストボックスに文字列を追加
// 戻り値 : 追加された位置
// *********************************************************
int LboxListAdd( HWND hWnd, LPCTSTR pszBuffer )
{
	int ret;

	ret = (int)SendMessage(
		hWnd,
		LB_ADDSTRING,
		0L,
		(LPARAM)(LPCTSTR)pszBuffer
	);

	return ret;
}
  



  動作確認

新しいプロジェクトを作成して、そこから実行してみます

まず、About ダイアログに、リストボックスを貼り付けてメッセージハンドラを以下のように変更します

  
// バージョン情報ボックス用メッセージ ハンドラ
int LboxListAdd( HWND hWnd, LPCTSTR pszBuffer );
LRESULT CALLBACK About( HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam )
{
	switch( message )
	{
		case WM_INITDIALOG:
			LboxListAdd( GetDlgItem( hDlg, IDC_LIST1 ), "ユーザ関数のテスト" );
			return TRUE;

		case WM_COMMAND:
			if( LOWORD(wParam) == IDOK || 
				LOWORD(wParam) == IDCANCEL ) 
			{
				EndDialog(hDlg, LOWORD(wParam));
				return TRUE;
			}
			break;
	}
	return FALSE;
}
  

このままではリンク時にエラーが出るので、プロジェクトの設定より先ほど作成したライブラリを参照させます

1) リンクタブで、カテゴリを「インプット」に変更
2) オブジェクト/ライブラリモジュールにライブラリ名を追加
3) 追加ライブラリのパスに、先ほどのライブラリの存在するディレクトリを入力する
(例) C:\test\lightbox\Release

4) 無視するライブラリに、LIBC と入力( これは、警告が出る場合の処理です )



  ついでなので、クラスを作成

クラスそのものは、先ほど 「MyClass」 として作成済みです。ツリーで選択して右クリックで出現するポップアップメニューから、「メンバ変数の追加」を選択します

変数のタイプ --> HWND
変数名 --> hDlg

として OK ( アクセス制御はデフォルトの Public です )

「メンバ関数の追加」を選択します

関数の型 --> int
関数の宣言 --> ListAdd(int nID, LPCTSTR pszBuffer)

として OK

MyClass.cpp に以下のようなコードが作成されます

  
int MyClass::ListAdd(int nID, LPCTSTR pszBuffer)
{

}
  

以下のように内容を書き込みます

  
int MyClass::ListAdd(int nID, LPCTSTR pszBuffer)
{
	return LboxListAdd( GetDlgItem(hDlg, nID), pszBuffer );
}
  



  コンストラクタの作成

方法としては、メンバ関数の追加と同じです。但し、関数の型は入力しないで、関数の宣言に以下のように入力します

MyClass( HWND hWnd )

  
MyClass::MyClass(HWND hWnd)
{
	hDlg = hWnd;
}
  



  動作確認

先ほどのテスト用プロジェクトのメッセージハンドラ部分を以下のように変更します

  
// バージョン情報ボックス用メッセージ ハンドラ
class MyClass  
{
public:
	MyClass( HWND hWnd );
	int ListAdd(int nID, LPCTSTR pszBuffer);
	HWND hDlg;
	MyClass();
	virtual ~MyClass();
};
MyClass *Dlg;
LRESULT CALLBACK About( HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam )
{
	switch( message )
	{
		case WM_INITDIALOG:
			Dlg = new MyClass( hDlg );
			Dlg->ListAdd( IDC_LIST1, "ユーザ関数のテスト" );
			return TRUE;

		case WM_COMMAND:
			if( LOWORD(wParam) == IDOK || 
				LOWORD(wParam) == IDCANCEL ) 
			{
				delete Dlg;
				EndDialog(hDlg, LOWORD(wParam));
				return TRUE;
			}
			break;
	}
	return FALSE;
}
  










  infoboard   管理者用   
このエントリーをはてなブックマークに追加





フリーフォントWEBサービス
SQLの窓WEBサービス

SQLの窓フリーソフト

素材

一般WEBツールリンク

SQLの窓

フリーソフト

JSライブラリ