switch (msg) {
case WM_SYSKEYDOWN :
switch(wparam) {
case 'X': //ALTキーと同時に押すキーで分岐。(ALT+'X')
if ( GetKeyState(VK_MENU) < 0) //ALTキーが同時押しされている
PostMessage(GetParent(hwnd), WM_CLOSE, 0, 0); //終了メッセージを送る
break;
case 'C': //ALT+C:は、計算ボタンを押したことにする。
if (GetKeyState(VK_MENU) < 0)
PostMessage(GetParent(hwnd), WM_COMMAND, ID_BCALC, 0);
break;
default :
break;
}
break;
・・・以下つづく・・・
補足:「VK_MENU」はALTキーのバーチャルキーコード。
キーのステータスの取得
キーまたはマウス ボタンのステータスを取得する場合、やむを得ない場合以外は GetAsyncKeyState 関数の使用は避けてください。GetAsyncKeyState はハードウェアに対するクエリを実行し、物理キーまたはボタンのステータスを特定しますが、プログラムによって押されたキーやユーザー補助ツールによってシミュレートされたキーは無視します。
可能な場合は、シミュレートされた入力も正しく反映する GetKeyState 関数を使用します。ただし、ユーザーが長過ぎる処理タスクを中断するためにキー入力を行った場合などの特定の条件下では GetAsyncKeyState を使用することも可能です。
マウスのドラッグ操作を処理するとき、マウス ボタンの解放を検知するために GetAsyncKeyState 関数を使用することは避けてください。代わりに、SetCapture 関数を使用してボタンアップのメッセージを待ちます。
GetAsyncKeyState 関数を使用すると、他の Windows 関数とメッセージを使用した場合とは異なる結果になる可能性があります。そうなると、アプリケーションの動作がシステム上の他のソフトウェアと不整合を起こす原因になります。
BOOL CApp::InitInstance()
{
//最大化して表示する。
m_nCmdShow = SW_MAXIMIZE;
m_pMainWnd = new CMainF;
m_pMainWnd->ShowWindow(m_nCmdShow);
m_pMainWnd->UpdateWindow();
return TRUE;
}
DLLファイルしかない場合、動的ロードするしかない
メインルーチンのはじめの方や好きなときに・・・
// CPIZとの接続関数。関数ポインタ
typedef BOOL (* BFunc)(LPCSTR , HWND); // 接続関数
typedef BOOL (* PFunc)(long, void*, long); // ポート番号変数とのSetGet
typedef BOOL (* EFunc)(LPCSTR ,LPCSTR); // イベント発行関数
typedef BOOL (* STFunc)(long, unsigned long, unsigned long); // SETタイマ関数。
typedef BOOL (* KTFunc)(long); // KILLタイマ関数。
// 関数ポインタの宣言
BFunc ZIPCONNECT;
BFunc ZIPCUT;
PFunc ZIPsetPortV;
PFunc ZIPgetPortV;
EFunc ZIPsendEvent;
STFunc ZIPsetTimer;
KTFunc ZIPKillTimer;
//・・・・・・
//略
//・・・・・・
// DLLのロード関連。
HINSTANCE hDLL = NULL;
hDLL = LoadLibrary("PIVZPnl.dll"); // 動的ライブラリをロード
if(hDLL == NULL) {
MessageBox(NULL, "PIVZPnl.DLL が取得できません",
"ERROR", MB_OK | MB_ICONINFORMATION);
return 0;
}
// DLL内の関数と前に宣言した関数ポインタを関連付ける。
ZIPCONNECT = (BFunc)GetProcAddress(hDLL, "PIVZ_LinkConnection");
ZIPCUT = (BFunc)GetProcAddress(hDLL, "PIVZ_LinkCut");
ZIPsetPortV = (PFunc)GetProcAddress(hDLL, "PIVZ_SetPortIDData");
ZIPgetPortV = (PFunc)GetProcAddress(hDLL, "PIVZ_GetPortIDData");
ZIPsendEvent = (EFunc)GetProcAddress(hDLL, "PIVZ_SendNameEvent");
ZIPsetTimer = (STFunc)GetProcAddress(hDLL, "PIVZ_SetTimer");
ZIPKillTimer = (KTFunc)GetProcAddress(hDLL, "PIVZ_KillTimer");
//・・・・・・
//略
//・・・・・・
// アプリケーション終了時には、忘れずに!
FreeLibrary(hDLL);
WindowMessageを共有する。
一意の割り振られていない UINT が割り振られるらしい。
// メッセージを識別する変数の宣言
UINT CPIZMes;
//・・・・・・
//略
//・・・・・・
switch (message)
{
case WM_INITDIALOG:
if (!ZIPCONNECT(szWindowClass, hDlg)) {
MessageBox(NULL, "CPIZと接続失敗", "ERROR", MB_OK);
}
// 接続したら、CPIZとメッセージを共有する。
CPIZMes = RegisterWindowMessage("CPIZ-PNL INTERFACE");
return TRUE;
case WM_DESTROY:
if (!ZIPCUT(szWindowClass, hDlg)) {
MessageBox(NULL, "CPIZと切断失敗", "ERROR", MB_OK);
}
return TRUE;
//・・・・・・・・・・・・
//以下略
RegisterWindowMessageで登録したメッセージはCASE文で使えない。
// Registerで登録したメッセージは定数でないので、CASE文で使えないようだ。
if (message == CPIZMes) {
switch(wParam)
{
case 1: // 終了通知
MessageBox(hDlg, "CPIZから終了通知されました。", "E70HUD", MB_OK);
if (!ZIPCUT(szWindowClass, hDlg)) {
MessageBox(NULL, "CPIZと切断失敗", "ずら", MB_OK);
}
return TRUE;
case 2: // リセット通知。CPIZのシミュレーションリセットボタンが押されると通知される。
//MessageBox(hDlg, "CPIZからのリセットが通知されました", "E70HUD", MB_OK);
// CPIZリセットによる外観アプリの初期化処理を行う場合はここで行います。
return TRUE;
case 11: // 値更新
以下の内容は、主に「effective STL」(メイヤーズ著、ピアソンエデュケーション)を参考にしています。
#include<sstream>
int a; //ここにintが入っている
string str //ここに代入したい
ostringstream oss;
oss << a;
str = oss.str(); //string型に変換!
oss.str().c_str();でchar*型に変換も可能。使用許諾条件・・・他のソフトではよく目にするけれど、実際に自分が書こうとすると何を書いてよいかわからないですね。でも免責事項だけは書いておかないと・・・と思っていました。
フリーウェアでは、タイトルは「使用許諾条件」ではなく、「著作権、免責事項」などと書かれているようです。以下の事柄について書いておけばよさそうな感じです。
以上の事柄を考慮して、当サイトのフリーウェアに関しては、以下のような「著作権、免責事項」文を作ってみました。
こんなかんじにしてみました。
上記の「著作権、免責事項」の文章についてお使いになりたい方は、ご自由にお使いください。その結果生じた、いかなる損害にも一切の責任を負いません。
Webサイトにも免責事項を書いた方が良いようです。大変です。
英語のサイトで10 Big Myths about copyright explainedを見つけました。これによると著作権表記は無くても、保護されるようであり(ベルヌ条約)、copyright または©を使えるが(c)だけでは効力がないなどと書いてあるようです。all rights reserved.もいくつかの国では効力はあるが・・・などとあるようで、いずれ詳しく読んでみたいのでリンク貼っておきます。
Copyright © 2004 すなやま All rights reserved.
このページの先頭に戻る