メルマガ:■CからウィンドウズDIRECTXプログラミング
タイトル:■CからはじめるWindowsDirectXへの道 ■  2000/08/21



======================================================== [ ▲PR ] ====
今ハ・ヤ・リの共同購入。がっ!・・・・・【T-select】は二味違う♪
Tシャツ Audition → http://216.71.100.246/b/a.cgi?k0730m0469 
======================================================== [ ▲PR ] ====

 
発行部数:MagMag 2313  Pubzine 312  カプライト209
     Melten 31  E-Magazine 54  ここでメール 146
     Macky 153 Melma 224  

 総発行部数:3446

▼△▼△▼△▼△▼△▼△▼△▼△▼△▼△▼△▼△▼△▼△▼△▼
------------------------------------------------------------
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓

■CからはじめるWindowsDirectXへの道 ■      
      
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛

 ホーム:<http://www.geocities.co.jp/SiliconValley-Bay/3125> 
   
┌─────────────────────────────┐


■第2章 Windows(文字処理 2回編)   


└─────────────────────────────┘
   さて、Winndows編もはや14回に突入しました.
  しかし、まだまだです。10分の1も終わっていません.
  Windows編完了はいつになるでしょう.

  ◎ さて、今回から自分の勉強もかねて通信関係の用語の
  解説も載せていきます.(勉強中)
───────────────────────────────
           通信   
   
  IPアドレス とは? 住所という感じですね。

  表記: 2進数で表されているものを10進数に直します.

   10101100 00010000 00000010 00010110

                        は、

   「172.16.2.22」 

           になります。

   このようなIPアドレスは、各国のNIC が重複のないように

   管理を行なっています.

   ◎)NIC network information center の略

   日本は,JPNICですね。<http://www.nic.ad.jp/index-j.html>

  IPアドレスは,「ネットワーク部」と「ホスト部」に分けて使用します.

  このうち「ネットワーク部」は、組織のネットワーク全体を示し,

  「ホスト部」は組織がパソコンやルーターなどに割り振ることが

  できる部分です.

   また、組織のネットワークを示す場合には,172.98.0.0 

   のように、ホスト部をすべて0にしたもので表記します.

  IPアドレス・クラス

  IPアドレスには、5種類のクラスがあります.

  ネットワーク部が8ビットのクラスA、16ビットのクラスB、24ビットのクラスC があります。

  また、クラスD,クラスEもありますが,ユーザーが実際に利用できるのは,

   A,B,Cです。

  クラスによって何が違うかというと,

    接続できるパソコンの数が違います.

    クラスA 約1700万台

    クラスB 約6万5000台

    クラスC 約254台

    です。

   と、ここまで説明してき他のですが,長くなってきましたので
   簡単にこれ以降を説明します.
    今現在では,Aクラスなどは割り当てられることはほとんどなく,
   たとえば接続しているときのみIPアドレスを割り当てるといったことが
   行なわれています. (プライベートアドレスとグローバルアドレス)
   また、クラスの細分化も行なわれています.(クラスレス)
 
   以上,初歩のIPアドレスでした.    

    間違えなどを発見した方は,私宛にメールを下さい.
   次回に、訂正を載せたいと思います.
    また、この講座への意見・ご要望もお待ちしております.

    メール:<mailto:rain2000@geocities.co.jp>
───────────────────────────────

==== [ ▼PR ] ========================================================


―― 初歩から学んでプロのJAVAプログラマーを目指す本格講座 ――
 ◆  「はじめて学ぶJAVAプログラミング」の著者が直接指導
◆+◆ 東京・お茶の水に10月開講    ≪ドットネット≫
 ◆  JAVAプログラミング本科コース(平日昼間週2回:6ヶ月)他
 資料請求はこちら: http://216.71.100.246/a/a.cgi?k0911m0469 

───────────────────────────────
 
    ホームページ
   
 メルマガ専用掲示板を開設しました.
 めるまがから掲示板と行くと,たどり着きます.
 趣味のほうの掲示板は、雑談です.
  
 追加:ダウンロードをHTML−HELPを使用したものに変更しました.
    以前の形より見やすくまた、使いやすくなりました.

───────────────────────────────
                   メルマガ

  いや,最近の広告もこってきましたね.
 しかし、レートから見てみますと,
 まぐまぐの広告のクリック率0.16%です。
  広告にどれくらいの効果を得られるのかは,
 疑問ですね.
  毎回、コムズショップを載せています。
 利益還元率:リンクスタッフ 1000円
 でした。    
───────────────────────────────
┌─────────────────────────────┐

 電話加入権激安!ISDNライトなら9800円で電話が引ける!?(株)コムズ
 ↓詳しくはここをクリック!
 <http://www.comzz.co.jp/cgi-bin/cookie/set.cgi?t=top&id=2543>

└─────────────────────────────┘
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
                ●   文字処理 2回 ●
    
  今回は、文字処理 2回 について触れていきます.
  関数などの説明は、サンプルのあとに乗せていきます。
 
┌─────────────────────────────┐
   では、まず ( WIN14.H )のソースです.
┌─────────────────────────────┐
     #define IDC_EDIT1 101
     #define IDC_EDIT2 102
     #define IDC_CAT 103
     #define IDC_COPY 104
     #define IDC_Compare 105
     #define IDC_Comparei 106
     #define IDC_PREV  107
     #define IDC_NEXT  108
     #define IDC_Ascii 109
     #define IDC_WChar 110
     #define IDC_sChar 111
     #define IDC_END 113
 
└─────────────────────────────┘  
       つぎに、( WIN14.RC ) のソースです. 
┌─────────────────────────────┐
     #include <windows.h>
     #include "win14.h"
     Win13Dlg DIALOG MOVEABLE DISCARDABLE 20,20,200,150
     STYLE DS_MODALFRAME | WS_POPUP |WS_VISIBLE|WS_CAPTION| WS_SYSMENU
     CAPTION "EditBox編"
     FONT 8,"Italic"
     BEGIN
      EDITTEXT   IDC_EDIT1,10,10,80,20,WS_TABSTOP
      EDITTEXT   IDC_EDIT2,100,10,80,20,WS_TABSTOP
        PUSHBUTTON "連結",IDC_CAT,10,30,40,20
      PUSHBUTTON "コピー",IDC_COPY,60,30,40,20
        PUSHBUTTON "比較1",IDC_Compare,110,30,40,20
      PUSHBUTTON "比較2",IDC_Comparei,160,30,40,20
        PUSHBUTTON "*PREV",IDC_PREV,10,55,40,20
      PUSHBUTTON "*NEXT",IDC_NEXT,60,55,40,20

        PUSHBUTTON "Ascii",IDC_Ascii,110,60,40,20
      PUSHBUTTON "WChar",IDC_WChar,160,60,40,20
     PUSHBUTTON "sChar",IDC_sChar,10,80,80,20
      PUSHBUTTON "終了",IDC_END,10,110,40,20
     END


└─────────────────────────────┘  
───────────────────────────────

 次に,メインソースファイルです.

┌─────────────────────────────┐
     #include <windows.h>
     #include "win14.h"
     #define FLAG 2
     #undef WindowsName
     #define WindowsName "Windows"

     #if FLAG==1
/*-----------------------------------------------------------------------------------------------------*/
/*-----------------------------------------Dialog------------------------------------------------------*/
/*-----------------------------------------------------------------------------------------------------*/
     HINSTANCE hInst;
     HWND hwndMain;
     LRESULT CALLBACK DlgProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam);
     #else
/*-----------------------------------------------------------------------------------------------------*/
/*-----------------------------------------Window------------------------------------------------------*/
/*-----------------------------------------------------------------------------------------------------*/

     HWND hwndSub;
     LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam);

     #endif


     int PASCAL WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow)
     {
     WNDCLASSEX wc;
      wc.hInstance =hInstance;
     wc.lpszClassName=WindowsName;
      wc.lpszMenuName=WindowsName;
     #if FLAG==1
/*-----------------------------------------------------------------------------------------------------*/
/*-----------------------------------------Dialog------------------------------------------------------*/
/*-----------------------------------------------------------------------------------------------------*/
      wc.lpfnWndProc =NULL;

     #else
/*-----------------------------------------------------------------------------------------------------*/
/*-----------------------------------------Window------------------------------------------------------*/
/*-----------------------------------------------------------------------------------------------------*/
      wc.lpfnWndProc =WndProc;

     #endif
     wc.cbSize =sizeof(WNDCLASSEX);
      wc.hbrBackground =(HBRUSH)GetStockObject(WHITE_BRUSH);
     wc.cbClsExtra =0;
      wc.cbWndExtra =0;
     wc.hIcon =(HICON)LoadIcon(NULL,IDI_APPLICATION);
      wc.hCursor=(HCURSOR)LoadCursor(NULL,IDC_ARROW);
     wc.style =CS_HREDRAW|CS_VREDRAW;
      wc.hIconSm =NULL;
     
      if(!(ATOM)RegisterClassEx(&wc))
     {
      return 0;
     }
      MSG msg;

     #if FLAG==1

/*-----------------------------------------------------------------------------------------------------*/
/*-----------------------------------------Dialog------------------------------------------------------*/
/*-----------------------------------------------------------------------------------------------------*/

         hInst=hInstance;
     hwndMain = CreateDialog( hInst, "Win13Dlg" , hwndMain, (DLGPROC)DlgProc ) ;

 
     if( hwndMain != NULL ) {
      ShowWindow( hwndMain, nCmdShow ) ;
     UpdateWindow( hwndMain ) ;
      }
     #else
/*-----------------------------------------------------------------------------------------------------*/
/*-----------------------------------------Window------------------------------------------------------*/
/*-----------------------------------------------------------------------------------------------------*/


      hwndSub=CreateWindow(WindowsName,WindowsName,WS_OVERLAPPED,100,100,300,300,NULL,NULL,hInstance,NULL);
     if (hwndSub!=NULL){
     ShowWindow(hwndSub,nCmdShow);
      UpdateWindow(hwndSub);
      }

     #endif
     while(GetMessage(&msg,NULL,0,0))
      {
      TranslateMessage(&msg);
      DispatchMessage(&msg);
      }

      return msg.wParam;
     }



     #if FLAG==1
/*-----------------------------------------------------------------------------------------------------*/
/*-----------------------------------------Dialog------------------------------------------------------*/
/*-----------------------------------------------------------------------------------------------------*/

     LRESULT CALLBACK DlgProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam)
     {
int i;
      char buf[256];
        char buf2[256];
        WCHAR wbuf[256];
      TCHAR tbuf[256];
     switch (message)
      {
     case WM_CREATE:
      break;
     case WM_COMMAND:
      switch(LOWORD(wParam))
      {
     case IDC_EDIT1:
     break;
      case IDC_EDIT2:
      break;
     case IDC_CAT://連結
     GetWindowText(GetDlgItem(hwnd,IDC_EDIT1),buf,lstrlen(buf));
      GetWindowText(GetDlgItem(hwnd,IDC_EDIT2),buf2,lstrlen(buf2));
      lstrcat(buf,buf2);
      SetWindowText(GetDlgItem(hwnd,IDC_EDIT2),buf);
     break;
      case IDC_COPY://コピー
      GetWindowText(GetDlgItem(hwnd,IDC_EDIT1),buf,lstrlen(buf));
      lstrcpy(buf2,buf);
     SetWindowText(GetDlgItem(hwnd,IDC_EDIT2),buf);
      break;
      case IDC_Compare:// 比較
      GetWindowText(GetDlgItem(hwnd,IDC_EDIT1),buf,lstrlen(buf));
     GetWindowText(GetDlgItem(hwnd,IDC_EDIT2),buf2,lstrlen(buf2));
      if (lstrcmp(buf,buf2)==0) 
      SetWindowText(hwnd,"一致");
      else
      SetWindowText(hwnd,"不一致");
      break;
      case IDC_Comparei://比較 NOT 大文字 小文字
      GetWindowText(GetDlgItem(hwnd,IDC_EDIT1),buf,lstrlen(buf));
     GetWindowText(GetDlgItem(hwnd,IDC_EDIT2),buf2,lstrlen(buf2));
      if (lstrcmpi(buf,buf2)==0)
      SetWindowText(hwnd,"一致");
      else
      SetWindowText(hwnd,"不一致");
      break;
     
      case IDC_PREV://*++;
      GetWindowText(GetDlgItem(hwnd,IDC_EDIT1),buf,lstrlen(buf));
     for (i=0;i<3;i++)
      CharNext(buf);
      SetWindowText(GetDlgItem(hwnd,IDC_EDIT2),CharPrev(buf,buf));
      break;
      case IDC_NEXT://*--;
      GetWindowText(GetDlgItem(hwnd,IDC_EDIT1),buf,lstrlen(buf));
      for (i=0;i<lstrlen(buf);i++)
      SetWindowText(GetDlgItem(hwnd,IDC_EDIT2),CharNext(buf));

      break;
      case IDC_Ascii://Ascii取得
      break;
      case IDC_WChar://WideChar
      GetWindowText(GetDlgItem(hwnd,IDC_EDIT1),buf,lstrlen(buf));
      MultiByteToWideChar(CP_ACP,MB_PRECOMPOSED,buf,-1,wbuf,255);
     wsprintf(buf,"%s",wbuf);
      SetWindowText(GetDlgItem(hwnd,IDC_EDIT2),buf);
      break;
     case IDC_sChar://CharWide
      GetWindowText(GetDlgItem(hwnd,IDC_EDIT1),buf,lstrlen(buf));
      MultiByteToWideChar(CP_ACP,MB_PRECOMPOSED,buf,-1,wbuf,255);
      WideCharToMultiByte(CP_ACP,0,wbuf,-1,tbuf,255,NULL,NULL);
     SetWindowText(GetDlgItem(hwnd,IDC_EDIT2),tbuf);
      break;
      case IDC_END://終了
      PostQuitMessage(0);
     break;
      }
      break;

      case WM_DESTROY:
      PostQuitMessage(0);
     break;
      default:
      return DefWindowProc(hwnd,message,wParam,lParam);
      }
     return 0;

     }

     #else

/*-----------------------------------------------------------------------------------------------------*/
/*-----------------------------------------Window------------------------------------------------------*/
/*-----------------------------------------------------------------------------------------------------*/

     LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam)
     {
     char buf[256];
      HDC hdc;
     BYTE key[256];
      WORD dwRet;
     switch(message)
      {
     case WM_CREATE:
     break;
      case WM_KEYDOWN:
      GetKeyboardState(key);
     hdc=GetDC(hwnd);
      wsprintf(buf,"%d",ToAscii(wParam,(lParam>>16) & 0xff,key,&dwRet,0));
      TextOut(hdc,0,0,buf,lstrlen(buf));
     wsprintf(buf,"[%c]",(TCHAR)dwRet & 0xff);
      TextOut(hdc,0,20,buf,lstrlen(buf));
      ReleaseDC(hwnd,hdc);
     if (LOWORD(wParam)==VK_ESCAPE)
     DestroyWindow(hwnd);
      break;
     case WM_DESTROY:
     PostQuitMessage(0);
      break;
     default:
     return DefWindowProc(hwnd,message,wParam,lParam);
      }
     return 0;

     }
     #endif


==== [ ▼PR ] ========================================================


★−★−★−★−★  クリックして夢をget!  ★−★−★−★−★
┏━━━━━━┓ 『えっ?こんなものが買えるの!?』
┃夢get宝島┃ 夢getに隊員登録をすると、数々のおトクな権利が。
┗━━━━━━┛  http://216.71.100.246/a/a.cgi?k0960m0469 
★−★−★ みんなも宝島に上陸してみて!いいことあるよ。 ★−★−★


======================================================== [ ▲PR ] ====
==== [ ▼PR ] ========================================================


 [∽--∽--∽  三菱商事で始める純金・プラチナ積立  ∽--∽--∽]
安定した資産運用をお考えのあなたに。月々3,000から貯蓄感覚で積立てし、
貯まった地金は、売却の他、ジュエリーやコインにも等価交換できます。
        http://216.71.100.246/a/a.cgi?k0855m0469 
[∽--∽--∽   資料のご請求は、こちらからどうぞ。   ∽--∽--∽]


======================================================== [ ▲PR ] ====


┌─────────────────────────────┐


    それでは、ソースの説明をしていきます.
──────────────────────────────
  今回のプログラムの説明
──────────────────────────────
  さて、今回は #if を用いて,
 Windowの作成も行なっています.
 なぜか、プロセス・スレッド.・フック
 どれに対しても、触れていないためです.

 では、説明です.
 
 EDITBOXを2つつくり、片方の値を
 変化させたものを、もうひとつのEDITBOXに
 入れています.

 また、WINDOWSでは、押されたキーが
 何かを判別しています.
/*-----------------------------------------------------------------------------------------------------*/
/*-----------------------------------------Dialog------------------------------------------------------*/
/*-----------------------------------------------------------------------------------------------------*/
──────────────────────────────
         変数宣言
──────────────────────────────
     int i;
      char buf[256];
       char buf2[256];
        WCHAR wbuf[256];
      TCHAR tbuf[256];

──────────────────────────────
  
  WCHAR 2バイト文字の取得に使用.
    TCHAR 使用としては,CHAR型に似ています.
 
──────────────────────────────
     case IDC_CAT://連結
     GetWindowText(GetDlgItem(hwnd,IDC_EDIT1),buf,lstrlen(buf));
     GetWindowText(GetDlgItem(hwnd,IDC_EDIT2),buf2,lstrlen(buf2));
      lstrcat(buf,buf2);
      SetWindowText(GetDlgItem(hwnd,IDC_EDIT2),buf);
     break;
──────────────────────────────
   ここでは、EDIT1と、EDIT2の文字を
   連結して,EDIT2に渡しています.
  
──────────────────────────────

    LPTSTR lstrcat(
      LPTSTR lpString1, 文字列
      LPCTSTR lpString2  追加する文字列 
    );


──────────────────────────────

case IDC_COPY://コピー
      GetWindowText(GetDlgItem(hwnd,IDC_EDIT1),buf,lstrlen(buf));
      lstrcpy(buf2,buf);
     SetWindowText(GetDlgItem(hwnd,IDC_EDIT2),buf);
break;
─────────────────────────────

   ここでは、EDIT1の文字をEDIT2にコピーしています.

─────────────────────────────

    LPTSTR lstrcpy(
      LPTSTR lpString1, //  コピー先
      LPCTSTR lpString2 //  コピー元
    );

 関連:lstrcpyn , lstrcpyWn ,lstrcpyW

─────────────────────────────
      case IDC_Compare:// 比較
      GetWindowText(GetDlgItem(hwnd,IDC_EDIT1),buf,lstrlen(buf));
     GetWindowText(GetDlgItem(hwnd,IDC_EDIT2),buf2,lstrlen(buf2));
if (lstrcmp(buf,buf2)==0) 
SetWindowText(hwnd,"一致");
      else
      SetWindowText(hwnd,"不一致");
break;
     
──────────────────────────────
     
   ここでは、文字列の比較を行なっています.

  EDIT1、とEDIT2の比較です.
──────────────────────────────
 2 つの文字列を比較します。大文字小文字を区別します。

  int lstrcmp(
     LPCTSTR lpString1, 
     LPCTSTR lpString2  
  );

  戻り値:
    負   lpString1 が指す文字列は、lpString2 が指す文字列よりも小さい。
    0    lpString1 が指す文字列は、lpString2 が指す文字列と等しい。
    正   lpString1 が指す文字列は、lpString2 が指す文字列よりも大きい。   

──────────────────────────────

      case IDC_Comparei://比較 NOT 大文字 小文字
      GetWindowText(GetDlgItem(hwnd,IDC_EDIT1),buf,lstrlen(buf));
     GetWindowText(GetDlgItem(hwnd,IDC_EDIT2),buf2,lstrlen(buf2));
if (lstrcmpi(buf,buf2)==0)
      SetWindowText(hwnd,"一致");
      else
      SetWindowText(hwnd,"不一致");
break;
──────────────────────────────
    2 つの文字列を比較します。大文字小文字の違いを区別しません。

    int lstrcmpi(
      LPCTSTR lpString1, //  address of first string
      LPCTSTR lpString2   //  address of second string
    );
   
  戻り値:
    負   lpString1 が指す文字列は、lpString2 が指す文字列よりも小さい。
    0    lpString1 が指す文字列は、lpString2 が指す文字列と等しい。
    正   lpString1 が指す文字列は、lpString2 が指す文字列よりも大きい。   
   
──────────────────────────────

      case IDC_PREV://*++;
      GetWindowText(GetDlgItem(hwnd,IDC_EDIT1),buf,lstrlen(buf));
     for (i=0;i<3;i++)
CharNext(buf);
      SetWindowText(GetDlgItem(hwnd,IDC_EDIT2),CharPrev(buf,buf));
      break;

──────────────────────────────

    ポインタないの文字列を移動させています.
  
──────────────────────────────
    文字列中の次の文字へのポインタを取得します。

    LPTSTR CharNext(
       LPCTSTR lpsz   //  文字列へのポインタ
    );

──────────────────────────────
case IDC_NEXT://*--;
      GetWindowText(GetDlgItem(hwnd,IDC_EDIT1),buf,lstrlen(buf));
      for (i=0;i<lstrlen(buf);i++)
SetWindowText(GetDlgItem(hwnd,IDC_EDIT2),CharNext(buf));

break;
──────────────────────────────

    ポインタないの文字列を移動させています.
  
──────────────────────────────

    文字列中の 1 つ前の文字へのポインタを取得します。

    LPTSTR CharPrev(
       LPCTSTR lpszStart,   //  最初の文字へのポインタ
       LPCTSTR lpszCurrent   //  現在の文字へのポインタ
    );

──────────────────────────────
case IDC_WChar://WideChar
     GetWindowText(GetDlgItem(hwnd,IDC_EDIT1),buf,lstrlen(buf));
        MultiByteToWideChar(CP_ACP,MB_PRECOMPOSED,buf,-1,wbuf,255);
         wsprintf(buf,"%s",wbuf);
      SetWindowText(GetDlgItem(hwnd,IDC_EDIT2),buf);
      break;
──────────────────────────────
  文字列をワイド文字列(Unicode)にマップします。
   この関数によってマップした文字列がマルチバイト文字セットに含まれるとは限りません。

  int MultiByteToWideChar(
    UINT CodePage,         // コードページ
    DWORD dwFlags,         // 文字の種類を指定するフラグ
    LPCSTR lpMultiByteStr, // マップ元文字列のアドレス
    int cchMultiByte,      // マップ元文字列のバイト数
    LPWSTR lpWideCharStr,  // マップ先ワイド文字列を入れるバッファのアドレス
    int cchWideChar        // バッファのサイズ
  );
 
  CP_ACP  ANSI コード

  詳しくは,MSDNを参照ください.

──────────────────────────────
       case IDC_sChar://CharWide
     GetWindowText(GetDlgItem(hwnd,IDC_EDIT1),buf,lstrlen(buf));
MultiByteToWideChar(CP_ACP,MB_PRECOMPOSED,buf,-1,wbuf,255);
      WideCharToMultiByte(CP_ACP,0,wbuf,-1,tbuf,255,NULL,NULL);
       SetWindowText(GetDlgItem(hwnd,IDC_EDIT2),tbuf);
      break;
──────────────────────────────
     ワイド文字列を新しい文字列にマップします。
     新しい文字列がマルチバイト文字セットから構成されるとは限りません。

     int WideCharToMultiByte(
       UINT CodePage,         // コードページ
       DWORD dwFlags,         // 処理速度とマッピング方法を決定するフラグ
       LPCWSTR lpWideCharStr, // ワイド文字列のアドレス
       int cchWideChar,       // ワイド文字列の文字数
       LPSTR lpMultiByteStr,  // 新しい文字列を受け取るバッファのアドレス
       int cchMultiByte,      // 新しい文字列を受け取るバッファのサイズ
       LPCSTR lpDefaultChar,  // マップできない文字の既定値のアドレス
       LPBOOL lpUsedDefaultChar   // 既定の文字を使ったときにセットするフラグのアドレス
     );

  詳しくは,MSDNを参照ください.
──────────────────────────────


==== [ ▼PR ] ========================================================


■■今までになかった新しい求職・求人サービス![アクティブウェブ]■■
日本初の本格的求職広告(匿名無料)でお仕事探しを応援します!応募はもち
ろん、企業からの勧誘が受けられる双方向の新サービス!ホームページと無料
メルマガのダブル広告で効果大!転職、就職、SOHO、契約、派遣等もOK
求人広告も多数。★★ < http://216.71.100.246/a/a.cgi?k0325m0469 > ★★


======================================================== [ ▲PR ] ====

/*-----------------------------------------------------------------------------------------------------*/
/*-----------------------------------------Window------------------------------------------------------*/
/*-----------------------------------------------------------------------------------------------------*/
──────────────────────────────

          変数宣言

──────────────────────────────

char buf[256];
      HDC hdc;
BYTE key[256];
      WORD dwRet;
──────────────────────────────
  BYTE GetKeyboradState()に使用.
  WORD  ToAscii() に使用. 
──────────────────────────────
   メッセージ部
──────────────────────────────
      case WM_KEYDOWN:
      GetKeyboardState(key);
     hdc=GetDC(hwnd);
      wsprintf(buf,"%d",ToAscii(wParam,(lParam>>16) & 0xff,key,&dwRet,0));
      TextOut(hdc,0,0,buf,lstrlen(buf));
     wsprintf(buf,"[%c]",(TCHAR)dwRet & 0xff);
      TextOut(hdc,0,20,buf,lstrlen(buf));
      ReleaseDC(hwnd,hdc);
     if (LOWORD(wParam)==VK_ESCAPE)
     DestroyWindow(hwnd);
      break;
──────────────────────────────
  ここでは、キーが押されたときにどのキーが押されたのかを
  判別しています.
──────────────────────────────

    ToAscii(wParam,(lParam>>16) & 0xff,key,&dwRet,0)

──────────────────────────────
     int ToAscii(
       UINT uVirtKey,     // 仮想キーコード
       UINT uScanCode,    // スキャンコード
       PBYTE lpKeyState,  // キー状態配列
       LPWORD lpChar,     // 変換されたキーに対するバッファ
       UINT uFlags        // アクティブメニューフラグ
     );

    値 意味 

    0 指定された仮想キーでは、現在のキーボード状態に対する変換はありません。 

    1 バッファに1つの文字がコピーされました。 

    2 バッファに2つの文字がコピーされました。

    これは通常、キーボードレイアウトに格納されたデッドキー文字(アクセントまたは区別的発音符)

    が指定された仮想キーと組み合せて1文字を構成できないことを表します。 


 関連項目:ToAsciiEx

──────────────────────────────

 今回は、だいぶ長くなりました.
  WideChar 漢字 問題は,結構多いですね.
  たとえば,パソコンのユーザー名によるバグとか
 ありますね。

  NEW!! 前回から、ソースファイル類を私のページの
 メールマガジンバックナンバーからダウンロードできるように
 しました.

 それでは。

└─────────────────────────────┘  

なお、以上のプログラムは、私の動作環境VC++6.0 Win32 Application
で確認済みです.

┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
 
 メールアドレス:<mailto:rain2000@geocities.co.jp>
 ホームページ :<http://www.geocities.co.jp/SiliconValley-Bay/3125>

 発行者:rain2000
 編集 :rain2000

 このメールマガジンは,以下の発行者さんを通して発行してます.

 ●まぐまぐ:
  アドレス : http://www.mag2.com/
 ID    : 0000024922

 ●クリックインカム:
 アドレス :http://clickincome.net/
 ID    : m00002885

 ●Pubzine 
 アドレス :Pubzine (http://www.pubzine.com/)
 ID    :004293

  ●ここでメール
 アドレス : http://mail.cocode.ne.jp/
 ID    : 0400100071

 ●メルマガ天国
 アドレス : http://melten.com/
 ID    : 300

 ●E-magazine 
 アドレス :http://www.emaga.com/
 ID    :cwindows

 ●Macky   
 アドレス : http://macky.nifty.ne.jp/
 ID    : 2329

  ●カプライト  
 アドレス : http://kapu.cplaza.ne.jp/ 
 ID    : 234

 また、登録解除などの手続きに関しましては,上記の  
  ホームにてお願いします.

  私宛にメールをいただいても、解除はおよび登録は
 いたしません.
 

┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
==== [ ▼PR ] ========================================================


■アジアネットの夏。 http://216.71.100.246/a/a.cgi?k0871m0469 
プロフェッショナルのためのリクルーティングサイト・アジアネットでは、
夏期限定のキャンペーンを実施中です。          ■━━━━┓
転職をお考えの方は、この機会にぜひご登録下さい。    ┃夏期限定┃
キャンペーンの受付は8月31日まで。ご登録はお早めに!!┗━━━━■


======================================================== [ ▲PR ] ====

ブラウザの閉じるボタンで閉じてください。