23章 VisualBASIC感覚でSDKプログラミング(その1)

<html>

<head>
<meta http-equiv="Content-Type" content="text/html; charset=shift_jis"></meta>
<title>23章 VisualBASIC感覚でSDKプログラミング(その1)</title>
</head>

<body bgcolor="WHITE">
<font size="5">23章 VisualBASIC感覚でSDKプログラミング(その1)</font>
<hr>
<p>
 前章では、モーダルなウインドウは独自のメッセージループを持つ事を示しました。つまり、モーダルダイアログボックスがメインウインドウになり得る事を示唆しました。この事を利用し、数章に渡って、テキスト型データベースである<b>簡易スケジューラー</b>を素材にして、VisualBASIC感覚でプログラミングしてみましょう。
<p>
<center>
</center>
<hr>
<p>
 VisualBASICでは、まず、コントロールを置くフォームを作成し、コントロールを置いて、これに生じるイベントに応じるルーチンを書くのが普通だと思います。そして、これをSDKレベルでやってみようとするのです。SDKレベルでも、意外と簡単にプログラミングが出来、如何に<b><i><u>事象駆動型プログラムが難しい</u></i></b>かが、分かれば成功です。
<hr>
<p>
<b>・仕様</b>
<p>
<center>
</center>
<p>
・赤丸で囲まれた1、2、3は、ドロップダウンリスト形式のコンボボックスで、予定日を選択します。
<p>
・赤丸で囲まれた4は、予定項目を入力するエディットコントロールです。
<p>
・赤丸で囲まれた5は、登録ボタンで、赤丸1・2・3・4の内容が正しい物であるなら、登録します。
<p>
・赤丸で囲まれた6はすでに予定が登録されている日にちを表示します。マウスの左ボタンのダブルクリックで、予定項目を呼出す事が出来、追加などの編集が出来ます。
<p>
・赤丸で囲まれた7は、赤丸で囲まれた7に選択項目があれば、削除します。削除の前に、確認ウインドウが表示されます。
<p>
・過去の予定項目は物理的に起動時に削除します。
<p>
・起動した日に予定項目が入っていると、起動時に画面で警告を発し、赤丸で囲まれた6でこれを示します。<br>
 <small><b>この機能は、WindowsNT4SP5でのみ動作確認/Windows95OSR2では機能せず</b></small>
<p>
 以上が、おおざっぱな仕様で、実際には、<a href="inst23.lzh">ダウンロード</a>して、使ってみてください。スタートアップにショートカットを置き、OS起動時に自動起動する様にしておくと、効果的と思います。
<hr>
<p>
 ダイアログテンプレートの作成方法は19章で説明していますので、これを参考に作成の様子を眺めて見てください。
<center>
</center>
<p>
 画面の作成は、VisualBASIC感覚である事がお分かりいただければ結構です。
<hr>
<p>
<b>・WinMain</b>
<p>
 さて、問題のアプリケーションエントリーポイントであるWinMainです。<br>
 今回は、この関数だけ示し、次章へ進みます。<br>
 無理にウインドウクラスの登録を隠しているのではありません。<br>
<p>
<table border="1" bgcolor="#F0F0F0">
<caption align="BOTTOM">リスト23-1
<tr><td>
<pre>
/* アプリケーションエントリーポイント */
int WINAPI WinMain(HINSTANCE hInstance,
                 HINSTANCE    hPrevInstance,
                  LPSTR        CmdLine,
                  int          CmdShow)
{
  struct  _finddata_t c_file;
   long    hFile;
   char    fullfilename[13];

  /*  インスタンスハンドルをファイル内でグローバルに持つ  */
   hInst=hInstance;

  _mkdir(".\\database");  /*  エラーがあってもとにかく作る    */
   _chdir(".\\database");  /*  カレントディレクトリを変更する  */

  /*  過ぎ去った予定を削除する:ここから  */
   if(-1!=(hFile=_findfirst("20*.txt",&c;_file)))
   {
       char*   filename;   /*  .txtを取ったファイル名  */  
       filename=strtok(c_file.name,".");
       if((c_file.attrib==_A_NORMAL | | c_file.attrib==_A_ARCH) 
           &amp;&amp; strcmp(filename,NowDate1())&lt;0 &amp;&amp; strlen(filename)==8)
       {
           sprintf(fullfilename,"%s.txt",filename);
           unlink(fullfilename);
       }
       while(_findnext(hFile,&c;_file)==0)
       {
           filename=strtok(c_file.name,".");
           if((c_file.attrib==_A_NORMAL | | c_file.attrib==_A_ARCH) 
               &amp;&amp; strcmp(filename,NowDate1())&lt;0 &amp;&amp; strlen(filename)==8)
           {
               sprintf(fullfilename,"%s.txt",filename);
               unlink(fullfilename);
           }
       }
       _findclose(hFile);
   }
   /*  過ぎ去った予定を削除する:ここまで  */
   
   /*  ここでメインウインドウを開ける  */
   DialogBox(hInst,MAKEINTRESOURCE(IDD_DIALOG1),NULL,(DLGPROC)MainWindowProc);

  _chdir("..\\");         /*  カレントディレクトリを元に戻す  */
   return  0;
}
</pre>
</table>
<hr>
<p>
 長い間、更新が滞っていたにも関わらず、アクセス数は増えるばかりで、こんな講座でも利用されているのかと思うと感謝です。<br>
 次回からプログラムソースを全部公開して説明に入ります。お楽しみに。
<hr>
<p>
<b>
・お詫び
</b>
<p>
 MLのメンバーからAPIの使い方の間違いを指摘されました。<br>
 すでにお使いの方は、databaseディレクトリを別のディレクトリに保存して、アンインストール後、ダウンロードしたデバッグバージョンをお使いください。databaseディレクトリを元の位置に戻せば、そのまま使えます。
<p align="RIGHT">
2002年7月9日
<hr>
<p align="RIGHT">
2002年7月1日<br>
修正2002年7月2日<br>
修正2002年7月9日<br>
修正2002年7月17日<br>
<hr>
<p align="RIGHT">
<a href="/web/20160505174357/http://web.kyoto-inet.or.jp:80/people/ysskondo/index.html">目次</a><br>
<a href="chap24.html">次へ</a>
<hr>
<p align="RIGHT">
著作権者:近藤妥

</body>
</html>

  • 最終更新:2018-03-11 05:08:23

このWIKIを編集するにはパスワード入力が必要です

認証パスワード