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;
}
  




yahoo  google  MSDN  MSDN(us)  WinFAQ  Win Howto  tohoho  ie_DHTML  vector  wdic  辞書  天気 


[cmaterial]
Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ClaudeBot/1.0; +claudebot@anthropic.com)
24/04/20 12:43:01
InfoBoard Version 1.00 : Language=Perl

1 BatchHelper COMprog CommonSpec Cprog CprogBase CprogSAMPLE CprogSTD CprogSTD2 CprogWinsock Cygwin GameScript HTML HTMLcss InstallShield InstallShieldFunc JScript JScriptSAMPLE Jsfuncs LLINK OldProg OracleGold OracleSilver PRO PRObrowser PROc PROconePOINT PROcontrol PROftpclient PROjscript PROmailer PROperl PROperlCHAT PROphp PROphpLesson PROphpLesson2 PROphpLesson3 PROphpfunction PROphpfunctionArray PROphpfunctionMisc PROphpfunctionString PROsql PROvb PROvbFunction PROvbString PROvbdbmtn PROvbonepoint PROwebapp PROwin1POINT PROwinSYSTEM PROwinYOROZU PROwindows ProjectBoard RealPHP ScriptAPP ScriptMaster VBRealtime Vsfuncs a1root access accreq adsi ajax amazon argus asp aspSample aspVarious aspdotnet aw2kinst cappvariety centura ckeyword classStyle cmaterial cmbin cmdbapp cmenum cmlang cmlistbox cmstd cmstdseed cmtxt cs daz3d db dbCommon dbaccess dnettool dos download flex2 flex3 flex4 framemtn framereq freeWorld freesoft gimp ginpro giodownload google hdml home hta htmlDom ie9svg install java javaSwing javascript jetsql jquery jsp jspTest jspVarious lightbox listasp listmsapi listmsie listmsiis listmsnt listmspatch listmsscript listmsvb listmsvc memo ms msde mysql netbeans oraPlsql oracle oracleWiper oraclehelper orafunc other panoramio pear perl personal pgdojo pgdojo_cal pgdojo_holiday pgdojo_idx pgdojo_ref pgdojo_req php phpVarious phpguide plsql postgres ps r205 realC realwebapp regex rgaki ruby rule sboard sc scprint scquest sdb sdbquest seesaa setup sh_Imagick sh_canvas sh_dotnet sh_google sh_tool sh_web shadowbox shgm shjquery shvbs shweb sjscript skadai skywalker smalltech sperl sqlq src systemdoc tcpip tegaki three toolbox twitter typeface usb useXML vb vbdb vbsfunc vbsguide vbsrc vpc wcsignup webanymind webappgen webclass webparts webtool webwsh win8 winofsql wmi work wp youtube