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


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

  =★英会話・CPA・IT関連のスクールを【無料】受講できる★=
   =★キャリアアップ・ソリューション・キャンペーン実施中★=
  有力企業からの求人情報も満載!キャリアアップを実現するチャンス
=★プロフェッショナルのためのリクルーティングサイト:アジアネット★=
        http://216.71.100.246/b/a.cgi?k0530m0469 

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


発行部数:MagMag 2278  Pubzine 312  カプライト211
     Melten 30  E-Magazine 55  ここでメール 146
     Macky 151 Melma 224  

 総発行部数:3410
▼△▼△▼△▼△▼△▼△▼△▼△▼△▼△▼△▼△▼△▼△▼△▼
------------------------------------------------------------
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓

■CからはじめるWindowsDirectXへの道 Vol33■          

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

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


■第2章 Windows(情報 編)   


└─────────────────────────────┘
  今回は,簡単な情報の取得を行います.
  次回からは,標準のコンボボックスなどの追加や取得などを
  行っていきたいと思います.
  
  <<<<<<<<<< NEW >>>>>>>>>>>>

  また、今回からISDNや電話回線などを専門に扱う店の
  リンクを持ってきましたので,是非たずねてみてください.
  また、リンクスタッフなども募集されています.
  これからISDNやパソコンをルータにて接続する方には
  お勧めです.NTTの半額といった感じです.
   かなり安い価格に提供されています.
  
┌─────────────────────────────┐
 電話加入権激安!ISDNライトなら9800円で電話が引ける!?(株)コムズ
 ↓詳しくはここをクリック!
 <http://www.comzz.co.jp/cgi-bin/cookie/set.cgi?t=top&id=2543>
└─────────────────────────────┘
     
───────────────────────────────
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
                ●   RGN 関連  ●
    
  今回は、RGN について触れていきます.
  関数などの説明は、サンプルのあとに乗せていきます。
  
 それでは、コードを示していきたいと思います。
┌─────────────────────────────┐
     #include<windows.h>


     #undef WindowsName
     #define WindowsName "Windows"
     /*  デバッグ用メッセージボックス   */
     void Mes(char*error);
     void Mes(char*error)
     {
           MessageBox(NULL,error,"Error",MB_OK);
     }
     HWND hwndMain;
     HINSTANCE hInst;
     BOOL fActive;
     LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam);
     int PASCAL WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow)
     {

           WNDCLASSEX wc;
              hInst=hInstance;
           wc.hInstance =hInstance;
           wc.lpszClassName=WindowsName;
           wc.lpszMenuName=WindowsName;
           wc.lpfnWndProc =WndProc;
           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))
           {
           Mes("レジスタークラスに登録を失敗しました。または、WNDCLASSEXの初期化に失敗しました。") ;
           return 0;
           }
           hwndMain=CreateWindow(
           WindowsName,
           WindowsName,
           WS_OVERLAPPEDWINDOW|WS_CLIPCHILDREN,
           CW_USEDEFAULT,
           CW_USEDEFAULT,
           600,
           320,
           NULL,
           NULL,
           hInstance,
           NULL);
           ShowWindow(hwndMain,nCmdShow);
           UpdateWindow(hwndMain);

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

           return msg.wParam;
          }

      LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam)
     {
          char strYourser[256];
           char strTime[256];
           DWORD dwBuf=256;
           PAINTSTRUCT ps;
           HDC hdc;
           SYSTEMTIME st;

           switch(message)
           {
           case WM_PAINT:
           hdc=BeginPaint(hwnd,&ps);
           GetUserName(strYourser,&dwBuf);
           TextOut(ps.hdc,0,0,strYourser,lstrlen(strYourser));

           GetLocalTime(&st);
           wsprintf(strTime,TEXT("ローカル時刻 現在の日付=%d/%02d/%02d 現在の時刻=%02d:%02d:%02d"),
                                 st.wYear ,st.wMonth ,st.wDay,st.wHour ,st.wMinute ,st.wSecond );
           TextOut(ps.hdc,0,50,strTime,lstrlen(strTime));

           GetSystemTime(&st);
           wsprintf(strTime,TEXT("世界標準時刻 現在の日付=%d/%02d/%02d 現在の時刻=%02d:%02d:%02d"),
                                  st.wYear ,st.wMonth ,st.wDay,st.wHour ,st.wMinute ,st.wSecond );
           TextOut(ps.hdc,0,100,strTime,lstrlen(strTime));

           EndPaint(hwnd,&ps);
           break;

          case WM_KEYDOWN:
           if(LOWORD(wParam)==VK_ESCAPE)
           DestroyWindow(hwnd);
           break;
           case WM_DESTROY:
           PostQuitMessage(0);
           break;
           default:
           return DefWindowProc(hwnd,message,wParam,lParam);
           }
           return 0;
     }


 
└─────────────────────────────┘
-------------------------------------------------------相互広告---
あのMSXパソコンのイベント開催「MSX電遊ランド」
  8/20 東京秋葉原 ヒロセムセン  → http://imahi.com/dm.htm

なつかしのMSX情報/無料相互広告マガジン情報/メル友サークル情報
      などなど 計4誌発行中 →  http://imahi.com/mailmag.htm
------------------------------------------------------
  さて、説明を記していきます.
───────────────────────────────
          char strYourser[256];
           char strTime[256];
           DWORD dwBuf=256;
           PAINTSTRUCT ps;
           HDC hdc;
           SYSTEMTIME st;
──────────────────────────────
 ここでは、変数を宣言しています.
 SYSTEMTIME 構造体は以下のように定義されています.
───────────────────────────────
SYSTEMTIME 構造体 
SYSTEMTIME 構造体は、次の形式です。

typedef struct _SYSTEMTIME {
    WORD wYear;
    WORD wMonth;
    WORD wDayOfWeek;
    WORD wDay;
    WORD wHour;
    WORD wMinute;
    WORD wSecond;
    WORD wMilliseconds;
} SYSTEMTIME;

SYSTEMTIME 構造体は、月、日、年、曜日、時、分、秒、ミリ秒の各メンバを使用し日付と時間を表します。

メンバ 

wYear 現在年。

wMonth 現在月。1 月は 1 です。

wDayOfWeek 現在の曜日。日曜が 0、月曜が 1、というように表します。

wDay 現在日。

wHour  現在時。

wMinute 現在分。

wSecond 現在秒。

wMilliseconds 現在のミリ秒。

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

        GetUserName(strYourser,&dwBuf);
TextOut(ps.hdc,0,0,strYourser,lstrlen(strYourser));
─────────────────────────────
GetUserName
現在のスレッドのユーザー名を取得します。

BOOL GetUserName(
  LPTSTR lpBuffer,  // address of name buffer
  LPDWORD nSize     // address of size of name buffer
);
パラメータ
lpBuffer

バッファへのポインタを指定します。
このバッファに、ユーザー名が NULL で終わる文字列として格納されます。
バッファのサイズが足りなかったときは、関数は失敗します。

nSize

バッファのサイズが入った DWORD 型変数へのポインタを指定します。

戻り値
関数が成功すると、0 以外の値が返ります。
また、lpBuffer パラメータに格納された文字数が、nSize パラメータが
指す変数に格納されます (終端の NULL 文字を含む)。
関数が失敗すると、0 が返ります。拡張エラー情報を取得するには、
GetLastError 関数を使います。

解説
現在のスレッドがほかのクライアントを偽装している場合は、
偽装しているクライアントのユーザー名が返ります。

───────────────────────────────
        GetLocalTime(&st);
  wsprintf(strTime,TEXT("ローカル時刻 現在の日付=%d/%02d/%02d 現在の時刻=%02d:%02d:%02d"),
                                 st.wYear ,st.wMonth ,st.wDay,st.wHour ,st.wMinute ,st.wSecond );
TextOut(ps.hdc,0,50,strTime,lstrlen(strTime));
───────────────────────────────
GetLocalTime
現在のローカル日時を取得します。

VOID GetLocalTime(
  LPSYSTEMTIME lpSystemTime   //  address of system time structure
);
パラメータ
lpSystemTime

SYSTEMTIME 構造体へのポインタを指定します。
この構造体に、現在のローカル日時が格納されます。

戻り値
戻り値はありません。


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

GetSystemTime(&st);
       wsprintf(strTime,TEXT("世界標準時刻 現在の日付=%d/%02d/%02d 現在の時刻=%02d:%02d:%02d"),
                                  st.wYear ,st.wMonth ,st.wDay,st.wHour ,st.wMinute ,st.wSecond );
TextOut(ps.hdc,0,100,strTime,lstrlen(strTime));
───────────────────────────────
GetSystemTime
現在のシステム時刻を取得します。
システム時刻は、グリニッジ標準時で表されます。

VOID GetSystemTime(
    LPSYSTEMTIME lpSystemTime //    システム時間構造体へのポインタ
);
パラメータ
lpSystemTime 

現在のシステム時刻を受け取る SYSTEMTIME 構造体へのポインタを指定します。

戻り値
戻り値はありません。


───────────────────────────────
 今回のような、ユーザー名や時刻などの情報はあまり役に立たない
カも知れませんが,何かの分野に置いては使う情報ともなります.
 
└─────────────────────────────┘  

なお、以上のプログラムは、私の動作環境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
 また、登録解除などの手続きに関しましては,上記の  
  ホームにてお願いします.

┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━


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