2006/10/13(金)ncurses::自作ライブラリ

ラッパクラスを作成中.

単なるウィンドウを作成するクラスと,スクロールウィンドウまではできた.次は,Treeを扱うウィンドウを作成する予定.

使い方のサンプルプログラム書いたら,テスト公開してみる.でも,かなり手抜きクラスだったり,いろいろ使い回してるせいで大変なことになってると,先にいいわけしておく.

現在の疑問点

  • Ctrlキーが押されてるか調べる方法が分からない.

追記

とりあえず,ncursesのソース落としてきて,サンプルプログラムを読んだ.単に文字コードと0x1fのandを取ればいいらしい> #define CTRL(x) ((x) & 0x1f) <

で,新たな問題点\Ctrl+Qとかは,プログラム側に来る前に持って行かれてしまうのですが(汗)\tty呼んで,使いたいコントロールコードはいじっておく必要があるのか

2006/08/26(土)VSEE の設定

パスの追加

SDKやDirectXをインストールしただけでは使えないので,インクルードパスとライブラリパスを設定します.

インクルードパスの設定

インストール先によってパスは違うので気を付けてください.

VSEE_include.JPG

ライブラリパスの設定

インストール先によってパスは違うので気を付けてください.あと,DirectXのライブラリは,32ビット用であるx86と64ビット用であるx64があります.自分の環境に合っているほうを指定してください.

VSEE_lib.JPG

実行パスの設定

インストール先によってパスは違うので気を付けてください.

VSEE_exec.JPG

プロジェクトの作成に関する設定

リンクライブラリの追加

F:\Program Files\Microsoft Visual Studio 8\VC\VCProjectDefaults\corewin_express.vsproject

AdditionalDependencies="kernel32.lib"

AdditionalDependencies="kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib"

に変更します

作成プロジェクトの変更

F:\Program Files\Microsoft Visual Studio 8\VC\VCWizards\AppWiz\Generic\Application\html\1041\AppSettings.htmの441行目から444行目をコメントアウトします

	WIN_APP.disabled = true;
	WIN_APP_LABEL.disabled = true; 
	DLL_APP.disabled = true; 
	DLL_APP_LABEL.disabled = true;

//	WIN_APP.disabled = true;
//	WIN_APP_LABEL.disabled = true; 
//	DLL_APP.disabled = true; 
//	DLL_APP_LABEL.disabled = true;

に変更します

これで,新しいプロジェクト - Visual C++ - Win32 - Win32コンソールアプリケーションからWindowsアプリケーションを作成できるようになります

関連記事

前(Visual Studio 2005 Express Edition)

2006/08/25(金)Visual Studio 2005 Express Edition

気づいたら

Visual Studio 2005 Express の無償ダウンロードを継続的に提供することになりました。

だそうです.大学のPCに入れていただけだったので,この機会に自宅のPCにも入れることにする.

Visual Studio Express Edition

MSDN

Visual Studio Expressにリンクがありますが,一応リンクを貼っておきます

追記

VSEEのCDイメージにはMSDN 2005 EEが入っていました.DLする必要はなさそうです.

SDK

標準では.NETしか入っていないので,SDKをDLしてくる.

DirectX SDK

使わないと思うけど,一応落としておいてみる.

ちなみに,Direct3D 10とか入っているようですが,Windows Vista RC1以降でない場合,インストールするなという注意書きがあります.

DirectX End-User Runtimes

一般ユーザ向け?メモ

d3dx9_**.dllが見つかりませんとか言われて実行でき無い場合があります.その場合,ランタイムの最新版が必要になります.

本来DirectXのリリースバージョンに影響されないプログラムを書くべきなんでしょうけどね.

注意

beta版とかプレビュー版が入っている場合,先にアンインストールしておく必要があるようです.

関連記事

続き(Visual Studio 2005 Express Editionの設定)

2006/08/08(火)VC++ 2005 EE

久しぶりに,Windowsプログラムを書いてみた.VC6は古いので,この春にMicrosoftが配付していた,Microsoft Visual C++ 2005 Express Editionをいじってみた.で,フリーであっただけのことはあって,リソースエディタは入ってないし,MFC等の古いライブラリも無し.そのため,地道にSDKで書くことに...

とりあえず,ステータスバーを付けて,ウィンドウを3分割し,それぞれサイズ変更できるようにするだけなんだけど... MFCを使っていたときよりも自由度は高いけど,メッセージ処理とかが大変.WM_SIZEイベントの発生するタイミングとか不明なのでどうにも怪しいことに.かなり微妙な線を行きながら,なんとか1日掛けて作り上げた.

めもオブジェクトのメソッドをウィンドウプロシージャにするための逃げ道.\スタティックメンバを作っておき,ウィンドウのユーザデータにオブジェクトを入れてしまう.\あとは,ウィンドウからオブジェクトを取り出して,メソッドを呼び出す.

// ウィンドウプロシージャ
static LRESULT CALLBACK Tree::WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    WNDPROC ParentWndProc = (WNDPROC)GetWindowLongPtr(hWnd, GWL_USERDATA);
    return CallWindowProc(ParentWndProc, hWnd, message, wParam, lParam);
}

int Init(...)
{
    // ウィンドウプロシージャの登録
    tree->m_ParentWndProc = (WNDPROC)SetWindowLongPtr(tree->m_hWnd, GWL_WNDPROC, (LONG)WndProc);
    SetWindowLongPtr(tree->m_hWnd, GWL_USERDATA, (DWORD)tree->m_ParentWndProc);
...
}

2006/06/26(月)ncurses

パスワードの変更コマンドを作成するためにいろいろ実験中。

CUIの管理は、やはり、ncursesが無難そうだ。

パスワード変更コマンドに必須だと思われる機能

  • ローカルエコーさせずにキー入力を受け付ける \ncursesのnoechoを使えばできる模様
  • 暗号化した状態で、メモリにデータを読み込む (dump対策) \乱数を用いてメモリをかき混ぜること位はしたいが...

2006/06/25(日)多段make

ソースファイルとプラグインを一括コンパイルするために,多段makeに挑戦.

とりあえずのメモです.きちんと出来るようになったら,詳細を書きます.

ディレクトリ構造

album3.1/
  src/
    plugin/
      plugin1/
      plugin2/
      plugin3/
  plugin/

ターゲットとなるMakefileは,{album3.1,src,plugin,plugin{1,2,3}}/Makefile

makeファイル

album3.1/Makefile

CC = gcc

all:
	$(MAKE) -C src

album3.1/src/Makefile

INCLUDE += -I .

all: here plugins
here: 
	# このフォルダでコンパイルする内容

plugins:
	$(MAKE) -C plugin

album3.1/src/plugin/Makefile

INCLUDE += -I ../..
 SUBDIRS = $(shell find * -type d)

all:
	list='$(SUBDIRS)'; for subdir in $$list; do \
	$(MAKE) -C $$subdir || exit 1;\
	done

clean:
	list='$(SUBDIRS)'; for subdir in $$list; do \
	$(MAKE) clean -C $$subdir;\
	done

album3.1/src/plugin/plugin1/Makefile

# 各プラグインにおまかせ
# ただし,INCLUDEを上書きしないように注意

all:
	# 適当にコンパイル

album3.1/src/plugin/MakefileにおいてENTRIES = $(shell find * -type d)をしてるけど,現在のフォルダにあるディレクトリ一覧を取り出す手段は無いのでしょうか?

誰か分かるかた教えてください.