|
======================================================== [ ▲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 ] ==== |