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


======================================================== [ ▲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への道 ■          

┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛

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


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


└─────────────────────────────┘
     
───────────────────────────────
  さて、盆休みもそろそろ、一息ついて,
  サーバーも一息入れてまた常夏の熱さがやってきます.
  ビールサーバーがおいしく飲めたりできますね.
  パソコンと頭だけは,アツクならないでとお願いしたいです.

          ActiveX

   また、私のホームページに自作のActiveXを組み込んだのですが,
  どうもセキュリティにひっかるらしく,どうしたものか?
  といったことで悩んでいます.
   セットアップの時点でも「はい、はい」設定を
  していても駄目なのですね.わかる人はわかると思います.

   JAVA APPLETで ツリービューを作ろうかとも
  思います.が、JAVAはほとんど進んでいません.

            通信

  また、最近通信の世界でも専用線として,ADSLがちらほらと
 見え始めました. 上記広告、COMZでも扱ってますね.

  B-ISDN も安く安く、早いうちに登場して欲しいものです.
  そうすれば,何でもできる時代ですね.10年後かな?
┌─────────────────────────────┐

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

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

    ホームページ
   
 メルマガ専用掲示板を開設しました.
 めるまがから掲示板と行くと,たどり着きます.
 趣味のほうの掲示板は、雑談です.
  
 追加:ダウンロードをHTML−HELPを使用したものに変更しました.
    以前の形より見やすくまた、使いやすくなりました.
   
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
                ●   文字処理  ●
    
  今回は、文字処理 について触れていきます.
  関数などの説明は、サンプルのあとに乗せていきます。
 
┌─────────────────────────────┐
   では、まず ( WIN13.H )のソースです.
┌─────────────────────────────┐
      #define IDC_EDIT1 101
      #define IDC_EDIT2 102
      #define IDC_LOWER 103
      #define IDC_UPPER 104
      #define IDC_LOWERMoji 105
      #define IDC_UPPERMoji 106
      #define IDC_Date  107
      #define IDC_Time  108
      #define IDC_CharLower 109
      #define IDC_CharUpper 110
      #define IDC_Alpha 111
      #define IDC_AlphaNumeric 112
      #define IDC_END 113

└─────────────────────────────┘  
       つぎに、( WIN13.RC ) のソースです. 
┌─────────────────────────────┐
      #include <windows.h>
      #include "win13.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_LOWER,10,30,40,20
       PUSHBUTTON "大文字",IDC_UPPER,60,30,40,20
       PUSHBUTTON "日付",IDC_Date,110,30,40,20
       PUSHBUTTON "時刻",IDC_Time,160,30,40,20
       PUSHBUTTON "小文字一部",IDC_LOWERMoji,10,55,40,20
       PUSHBUTTON "大文字一部",IDC_UPPERMoji,60,55,40,20

       PUSHBUTTON "小文字?",IDC_CharLower,110,60,40,20
       PUSHBUTTON "大文字?",IDC_CharUpper,160,60,40,20
      PUSHBUTTON "文字アルファベット",IDC_Alpha,10,80,80,20
       PUSHBUTTON "文字アルファベット数字?",IDC_AlphaNumeric,90,80,100,20
      PUSHBUTTON "終了",IDC_END,10,110,40,20
      END

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

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

┌─────────────────────────────┐
┌─────────────────────────────┐
      #include <windows.h>
      #include "win13.h"
      #undef WindowsName
      #define WindowsName "Windows"

      void SetListCount(HWND hwnd);
      HINSTANCE hInst;
      HWND hwndMain;

      LRESULT CALLBACK DlgProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam);
      int PASCAL WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow)
      {
      WNDCLASSEX wc;
       wc.hInstance =hInstance;
      wc.lpszClassName=WindowsName;
       wc.lpszMenuName=WindowsName;
      wc.lpfnWndProc =NULL;
       wc.cbSize =sizeof(WNDCLASSEX);
      wc.hbrBackground =(HBRUSH)GetStockObject(GRAY_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;
       }
          hInst=hInstance;

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

 
       if( hwndMain != NULL ) {
      ShowWindow( hwndMain, nCmdShow ) ;
       UpdateWindow( hwndMain ) ;
      }
       MSG msg;
      while(GetMessage(&msg,NULL,0,0))
       {
       TranslateMessage(&msg);
      DispatchMessage(&msg);
       }

       return msg.wParam;
      }

      LRESULT CALLBACK DlgProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam)
      {
      char buf[256];
       BOOL ret=FALSE;
      switch (message)
       {
      case WM_CREATE:
      break;
       case WM_COMMAND:
       switch(LOWORD(wParam))
      {
       case IDC_EDIT1:
       break;
      case IDC_EDIT2:
      EnableWindow(GetDlgItem(hwnd,IDC_EDIT2),FALSE);
       break;
       case IDC_LOWER:
       GetWindowText(GetDlgItem(hwnd,IDC_EDIT1),buf,lstrlen(buf));
      SetWindowText(GetDlgItem(hwnd,IDC_EDIT2),CharLower(buf));
       break;
       case IDC_UPPER:
       GetWindowText(GetDlgItem(hwnd,IDC_EDIT1),buf,lstrlen(buf));
      SetWindowText(GetDlgItem(hwnd,IDC_EDIT2),CharUpper(buf));
       break;
       case IDC_LOWERMoji:
       GetWindowText(GetDlgItem(hwnd,IDC_EDIT1),buf,lstrlen(buf));
      CharLowerBuff(buf+5,lstrlen(buf));
       SetWindowText(GetDlgItem(hwnd,IDC_EDIT2),buf);
       break;
      case IDC_UPPERMoji:
       GetWindowText(GetDlgItem(hwnd,IDC_EDIT1),buf,lstrlen(buf));
       CharUpperBuff(buf+5,lstrlen(buf));
       SetWindowText(GetDlgItem(hwnd,IDC_EDIT2),buf);
      break;
       case IDC_Date://日付取得
      // GetLocaleInfo(LOCALE_USER_DEFAULT,DATE_LONGDATE,buf,64); //日本語を格納
       // GetDateFormat(LOCALE_USER_DEFAULT,TIME_FORCE24HOURFORMAT,NULL,NULL,buf,127);//2000年8月
      // GetDateFormat(LOCALE_USER_DEFAULT,DATE_SHORTDATE,NULL,NULL,buf,127);//2000/8/17
       GetDateFormat(LOCALE_USER_DEFAULT,DATE_LONGDATE,NULL,NULL,buf,127);//2000年8月17日

       SetWindowText(GetDlgItem(hwnd,IDC_EDIT2),buf);
       break;
      case IDC_Time://時刻取得
       // GetTimeFormat(LOCALE_USER_DEFAULT,DATE_SHORTDATE,NULL,NULL,buf,127);//21
      // GetTimeFormat(LOCALE_USER_DEFAULT,DATE_LONGDATE,NULL,NULL,buf,127);//21:29
       GetTimeFormat(LOCALE_USER_DEFAULT,TIME_FORCE24HOURFORMAT,NULL,NULL,buf,127);//21:29:36
      SetWindowText(GetDlgItem(hwnd,IDC_EDIT2),buf);
       break;
       case IDC_CharLower://小文字の判定
       GetWindowText(GetDlgItem(hwnd,IDC_EDIT1),buf,lstrlen(buf));
      ret=IsCharLower(buf[0]);
       if (ret==TRUE)
       SetWindowText(GetDlgItem(hwnd,IDC_EDIT2),"小文字です.buf[0]");
       else
       SetWindowText(GetDlgItem(hwnd,IDC_EDIT2),"小文字ではありません.buf[0]");
       break;

       case IDC_CharUpper://大文字の判定
       GetWindowText(GetDlgItem(hwnd,IDC_EDIT1),buf,lstrlen(buf));
       ret=IsCharUpper(buf[0]);
      if (ret==TRUE)
       SetWindowText(GetDlgItem(hwnd,IDC_EDIT2),"大文字です.buf[0]");
       else
       SetWindowText(GetDlgItem(hwnd,IDC_EDIT2),"大文字ではありません.buf[0]");
      break;
       case IDC_Alpha://文字 か アルファベットの判定
       GetWindowText(GetDlgItem(hwnd,IDC_EDIT1),buf,lstrlen(buf));
       ret=IsCharAlpha(buf[0]);
      if (ret==TRUE)
       SetWindowText(GetDlgItem(hwnd,IDC_EDIT2),"文字アルファベット.buf[0]");
       else
       SetWindowText(GetDlgItem(hwnd,IDC_EDIT2),"NOT 文字アルファベット.buf[0]");
      break;
       case IDC_AlphaNumeric://文字 か アルファベット か 数値 の判定
       GetWindowText(GetDlgItem(hwnd,IDC_EDIT1),buf,lstrlen(buf));
       ret=IsCharAlphaNumeric(buf[0]);
      if (ret==TRUE)
       SetWindowText(GetDlgItem(hwnd,IDC_EDIT2),"文字数値アルファベット.buf[0]");
       else
       SetWindowText(GetDlgItem(hwnd,IDC_EDIT2),"NOT 文字数値アルファベット.buf[0]");
      break;
       case IDC_END://終了
       PostQuitMessage(0);
       break;
       }
       break;
       case WM_DESTROY:
       PostQuitMessage(0);
      break;
       default:
       return DefWindowProc(hwnd,message,wParam,lParam);
       }
       return 0;

      }


    それでは、ソースの説明をしていきます.
──────────────────────────────
  今回のプログラムの説明
──────────────────────────────
 エディットボックスに入力した文字を
 もうひとつのエディットボックスに、変換させておくるものです。
 また、時刻などは,同じように出力をしています.
 
 VBでは、すぐですが、VCですといくつかの手間を踏まなければ
 なりません。
 クラスを作るとよいでしょう。 
──────────────────────────────
      case IDC_EDIT2:
           EnableWindow(GetDlgItem(hwnd,IDC_EDIT2),FALSE);
      break;
──────────────────────────────
  ここでは、エディットボックスを無効化しています.
──────────────────────────────
   EnableWindow(HWND hwnd,BOOL TURE | FALSE);
      TRUE  有効
   FALSE 無効
──────────────────────────────
       case IDC_LOWER:
    GetWindowText(GetDlgItem(hwnd,IDC_EDIT1),buf,lstrlen(buf));
    SetWindowText(GetDlgItem(hwnd,IDC_EDIT2),CharLower(buf));
       break;
──────────────────────────────
    ここでは、小文字変換を行なっています.
──────────────────────────────

    LPTSTR  CharLower(LPTSTR lpszString);

──────────────────────────────
case IDC_UPPER:
     GetWindowText(GetDlgItem(hwnd,IDC_EDIT1),buf,lstrlen(buf));
     SetWindowText(GetDlgItem(hwnd,IDC_EDIT2),CharUpper(buf));
       break;
──────────────────────────────
   ここでは、大文字変換を行なっています.
──────────────────────────────
   
       LPTSTR CharUpper(LPTSTR lpszString);

──────────────────────────────
case IDC_LOWERMoji:
     GetWindowText(GetDlgItem(hwnd,IDC_EDIT1),buf,lstrlen(buf));
     CharLowerBuff(buf+5,lstrlen(buf));
            SetWindowText(GetDlgItem(hwnd,IDC_EDIT2),buf);
break;
──────────────────────────────
      ここでは、文字の場所を指定して小文字に変換を行なっています.
──────────────────────────────
   
   CharLowerBuf(LPTSTR lpszString,DWORD dwBytes)    

──────────────────────────────
case IDC_UPPERMoji:
            GetWindowText(GetDlgItem(hwnd,IDC_EDIT1),buf,lstrlen(buf));
     CharUpperBuff(buf+5,lstrlen(buf));
     SetWindowText(GetDlgItem(hwnd,IDC_EDIT2),buf);
         break;
──────────────────────────────
      ここでは、文字の場所を指定して大文字に変換を行なっています.
──────────────────────────────

   CharUpperBuf(LPTSTR lpszString,DWORD dwBytes)    

──────────────────────────────
       case IDC_Date://日付取得
//GetLocaleInfo(LOCALE_USER_DEFAULT,DATE_LONGDATE,buf,64); //日本語を格納
       //GetDateFormat(LOCALE_USER_DEFAULT,TIME_FORCE24HOURFORMAT,NULL,NULL,buf,127);//2000年8月
//GetDateFormat(LOCALE_USER_DEFAULT,DATE_SHORTDATE,NULL,NULL,buf,127);//2000/8/17
       GetDateFormat(LOCALE_USER_DEFAULT,DATE_LONGDATE,NULL,NULL,buf,127);//2000年8月17日

SetWindowText(GetDlgItem(hwnd,IDC_EDIT2),buf);
        break;
──────────────────────────────
       ここでは、日付を取得しています.
──────────────────────────────
  int GetDateFormat(
             LCID Locale,       
             DWORD dwFlags,     
             CONST SYSTEMTIME *lpDate,                     
             LPCTSTR lpFormat,  
             LPTSTR lpDateStr,  
             int cchDate        
           );
    詳しくは,MSDNをご参照ください。
──────────────────────────────
case IDC_Time://時刻取得
       //GetTimeFormat(LOCALE_USER_DEFAULT,DATE_SHORTDATE,NULL,NULL,buf,127);//21
//GetTimeFormat(LOCALE_USER_DEFAULT,DATE_LONGDATE,NULL,NULL,buf,127);//21:29
GetTimeFormat(LOCALE_USER_DEFAULT,TIME_FORCE24HOURFORMAT,NULL,NULL,buf,127);//21:29:36
SetWindowText(GetDlgItem(hwnd,IDC_EDIT2),buf);
       break;
──────────────────────────────

    ここでは、日付を取得しています.

──────────────────────────────
      int GetTimeFormat(
        LCID Locale,       
        DWORD dwFlags,     
        CONST SYSTEMTIME *lpTime,
        LPCTSTR lpFormat, 
        LPTSTR lpTimeStr, 
        int cchTime       
      );  
──────────────────────────────
case IDC_CharLower://小文字の判定
GetWindowText(GetDlgItem(hwnd,IDC_EDIT1),buf,lstrlen(buf));
ret=IsCharLower(buf[0]);
       if (ret==TRUE)
    SetWindowText(GetDlgItem(hwnd,IDC_EDIT2),"小文字です.buf[0]");
else
    SetWindowText(GetDlgItem(hwnd,IDC_EDIT2),"小文字ではありません.buf[0]");
       break;

──────────────────────────────
   ここでは、小文字の判定を行なっています.
──────────────────────────────
   
   BOOL IsCharLower(TCHAR ch)    
   
──────────────────────────────
       case IDC_CharUpper://大文字の判定
GetWindowText(GetDlgItem(hwnd,IDC_EDIT1),buf,lstrlen(buf));
ret=IsCharUpper(buf[0]);
if (ret==TRUE)
       SetWindowText(GetDlgItem(hwnd,IDC_EDIT2),"大文字です.buf[0]");
else
SetWindowText(GetDlgItem(hwnd,IDC_EDIT2),"大文字ではありません.buf[0]");
break;
──────────────────────────────
   ここでは、大文字の判定を行なっています.
──────────────────────────────

   BOOL IsCharUpper(TCHAR ch)    

──────────────────────────────
       case IDC_Alpha://文字 か アルファベットの判定
GetWindowText(GetDlgItem(hwnd,IDC_EDIT1),buf,lstrlen(buf));
ret=IsCharAlpha(buf[0]);
if (ret==TRUE)
       SetWindowText(GetDlgItem(hwnd,IDC_EDIT2),"文字アルファベット.buf[0]");
else
SetWindowText(GetDlgItem(hwnd,IDC_EDIT2),"NOT 文字アルファベット.buf[0]");
break;
──────────────────────────────
    ここでは、文字かアルファベットかの判定を行なっています.
──────────────────────────────
  
    BOOL IsCharAlpha(TCHAR ch)

──────────────────────────────
       case IDC_AlphaNumeric://文字 か アルファベット か 数値 の判定
GetWindowText(GetDlgItem(hwnd,IDC_EDIT1),buf,lstrlen(buf));
ret=IsCharAlphaNumeric(buf[0]);
if (ret==TRUE)
       SetWindowText(GetDlgItem(hwnd,IDC_EDIT2),"文字数値アルファベット.buf[0]");
else
SetWindowText(GetDlgItem(hwnd,IDC_EDIT2),"NOT 文字数値アルファベット.buf[0]");
break;
──────────────────────────────
    ここでは、文字かアルファベットか数値の判定を行なっています.
──────────────────────────────
  
    BOOL IsCharAlphaNumeric(TCHAR ch);

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

   今回文字処理を行ないました,
  しかし、VBが恋しくなりますね.
 まあ、クラスにまとめれば楽ですね.
  まだまだ、文字処理について触れていない部分が
 ありますので、次回はVBで言うところの [ strConv ]
 系の処理について触れます.
 
 と、クラスにまとめればと書いて思い出しましたが,
 C++ をやっていないですね. STL も!
  
 もう少し,落ち着いたら短期集中「7回で覚えるC++]
 という形で、このメルマガ内で行なうかもしれません.
 いつになるかは、未定です.

 いままでの内容で、EDITをつかったエディタぐらいは
 つくれるようになったと思います.

 つくれば作るほどおぼえるものです、言語は!
 ただし、ゲームに関しては,思考の仕方が重要ですね.
 あとは、バグが出やすい部分を体で覚える.
 これだけです.
 
 それでは、よい休日を!
└─────────────────────────────┘  

なお、以上のプログラムは、私の動作環境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 ] ========================================================


┌■┐【▼】実務経験・技術・資格をお持ちのエンジニアの皆様必見!【▼】
│転│9月9日(土)10:00〜17:00≪東京国際フォーラム≫にて、
│職│第2回イムカエンジニア Career Expo 2000にて転職相談を行います。
│相│ご予約は以下のウェブサイトにてお願いいたします。−【秘密厳守】−
│談└─→(URL) http://216.71.100.246/a/a.cgi?k0771m0469 


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


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


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

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


■この夏、勇気を出して、人生のパートナー探しを積極的に始めませんか?
 □これまでに10000組のご成婚カップルが幸せをつかんでいます。
  ■「結婚情報サービスのツヴァイ」は信頼のイオングループ。
   □本気で結婚したいあなただけに訪れてほしい真面目なサイトです。
資料請求はこちら⇒ http://216.71.100.246/a/a.cgi?k0820m0469 


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

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