基本的な解説
参考:
http://www9.plala.or.jp/dequartet/new_page_2.htm


猫でもできるWindowsプログラミング 参考

●用語

イベント              メッセージ
―――――→<システム>―――――→<プログラム>
イベント
=ユーザが、マウスをクリックした
=ユーザが、キーを押した
=ウィンドウサイズを変更された などなど
コールバック関数
P15参照
システムから呼ばれる関数の総称。
類語:ウィンドウプロシージャ。
インスタンス
P20参照
メモリ上にあるプログラムのこと。
ハンドル
P20参照
メモリ上にあるプログラムを、識別(区別)するために用いられる、識別記号(番号)。
ウィンドウクラス
P21参照
ウィンドウの性質(=書式)を格納した構造体。(=ウィンドウの枠組み、様式)
→定義(=登録・設定)の方法は、P23参照。
→システムへの登録の方法は、P28参照。(RegisterClassEx関数)
メッセージループ
P22、P31、P34参照
システムから送られてくるメッセージを受け取り、プロシージャに送出する。
ウィンドウプロシージャ
P22、P36参照
メッセージの処理を行う。
(=イベント発生に対する、プログラムの反応を記述する。)
同類語:コールバック関数。
デバイスコンテキスト
P40参照
Windowsが内部的に保持する、出力デバイス情報を格納する構造体のこと。
*出力デバイス:ディスプレイ・プリンタなど
GDI関数
P60参照
クライアント領域に描画する関数の総称。
例>TextOut関数など
無効領域
P47参照
描き直し(=再描画)を必要とする部分(=領域)のこと。
<具体例>
・重なっているウィンドウをどかした時。
・メニューを押して、メニューが表示され、
 ウィンドウが隠されている状態から、メニューの表示を消した時。
<用語の使用例>
「描き直しを必要とする部分が発生した」
=「無効領域が発生した」
⇒WM_PAINTメッセージが(ウィンドウプロシージャに)送られてくる。
*関連関数:Invalidate関数(無効領域を発生させる関数。)


●関数
WinMain関数:プログラムの開始点。
 修飾子は、必ずint WINAPIがつく。例>int WINAPI WinMain(){}
 戻り値もint型。
InitApp関数:名前は任意。ウィンドウクラスの登録。
 *ウィンドウクラス=ウィンドウの性質を表したもの。
InitInstance関数:名前は任意。ウィンドウの生成。
WndProc関数:名前は任意。ウィンドウプロシージャ。(コールバック関数)=システムから呼ばれて使われる関数。
 どこからも参照されていない。
 →システムから呼ばれる関数⇒コールバック関数という。
 *CALLBACK修飾子をつける。例>LRESLT CALLBACK WndProc(){}
 イベントが起きた時の、プログラムの反応 を記述する。
 Switch文で記述される。
  例>switch(AAAA){case BBB: CCCC;}


●引数
HINSTANCE:インスタンスハンドルと呼ばれる。(Handle Instance)
 インスタンス=メモリ上に置かれているプログラムのこと。
 ハンドル=識別番号。
 インスタンスハンドル=メモリ上に置かれているプログラムを識別するための番号。

HINSTANCE hCurInst:=Handle Instance Handle Current Instance
 現在のインスタンスハンドルの値を意味する。

HINSTANCE hPrevInst:=Handle Instance Handle Preview(?) Instance
 以前のインスタンスハンドルの値を意味する。
 *Win32アプリケーションでは、常にNULLとなっているので使うことはない。
 (Win16アプリとの互換性のための名残り。)

LPSTR lpsCmdLine:=Long Pointer Strings Long Pointer Strings Command Line
 コマンドライン引数が格納される場所。
 コマンドライン引数を利用するプログラムでは、この格納場所を調べて、
 必要な動作を解析する。

int nCmdShow:=int Number(?) Command Show
 ウィンドウの表示状態を指定するときに利用する、情報格納場所。


●WinMain関数の中身概要
・ウィンドウクラスの定義
・ウィンドウクラスの登録
・登録したウィンドウクラスを元に、親ウィンドウを作成
・メッセージループの作成





<1章>
GetMessage関数
メッセージを取得し、MSG構造体に格納する。
MessageBox関数

TranslateMessage関数
仮想キーメッセージを文字メッセージに変換する。
DispatchMessage関数
メッセージをウィンドウプロシージャに送出する。
LoadImage関数
アイコン・カーソル・ビットマップをロードする。
GetStockObject関数
ストックされた(=定義済みの)オブジェクトのハンドルを取得する。
RegisterClassEx関数
ウィンドウクラス(=ウィンドウの性質)をシステムに登録する。
CreateWindow関数
ウィンドウを作成する。
ShowWindow関数
ウィンドウの表示状態を設定する。
UpdateWindow関数
ウィンドウを更新する。
PostQuitMessage関数

DefWindowProc関数
デフォルトの処理を提供する。
=デフォルトの処理内容を実行する。
=自分で処理せずに、システムに任せてしまいたい時に使う。
MAKEINTRESOURCEマクロ

<2章>
TextOut関数
文字列を描画する。GDI関数の1種。
GetDC関数
デバイスコンテキストハンドルを取得する。
*デバイスコンテキストハンドル=Windowsが内部的に保持している、出力デバイスに関する情報の構造体。
ReleaseDC関数
デバイスコンテキストハンドルを開放する。
BeginPaint関数
描画処理を開始する。
EndPaint関数
描画処理を終了する。
InvalidateRect関数
無効領域(更新領域)を発生させる。
DrawText関数
指定した長方形内に、文字列を描画する。
GetClientRect関数
クライアント領域の矩形を取得する。
SetTextColor関数
文字列の色を変える。
DrawTextEx関数
指定した矩形内に、フォーマットした文字列を描画する。
CreateFont関数
論理フォントを作成する。(=希望のフォントハンドルを取得する。)
*カスタムフォントを利用する場合に使う。
*組み込みフォントを利用する場合には使わない。(GetStockObject関数を使う。)
CreateFontIndirect関数
論理フォントを作成する。(=希望のフォントハンドルを取得する。)
*上記のCreateFont関数と同じ。

RGBマクロ
色を指定する。

<第3章>
SetPixel関数
指定した座標に、点を描画する。
SetPixelV関数
指定した座標に、点を描画する。(戻り値のカラー値が必要ない場合に使う。)

MoveToEx関数
現在位置情報を、指定した座標の情報に更新(=設定)する。
(=現在の位置を設定して、始点とする)
LineToEx関数とセットで使う。
LineToEx関数
現在位置から、指定した座標までの直線を描画する。
MoveToEx関数とセットで使う。

SetDCPenColor関数
ストックオブジェクトペンの色を指定する。
*ストックオブジェクトペンを利用するには、
 GetStockObject関数でストックオブジェクトペンのハンドルを取得し、
 SelectObject関数で選択する。

CreatePen関数
論理ペンを作成する。
=あらかじめ用意されたペンの書式を組み合わせて、オリジナルのペンを作成する。
→システムに認識(登録)するには、SelectObject関数を使う。
 →利用し終わったら、DeleteObject関数で破棄する。

PolyLine関数
連続して直線を描画する。
=終点を、次の直線の始点として、連続描画する。

SetDCBrushColor関数
ストックオブジェクトブラシの色を指定する。
*ペンとブラシの違い:
 ペン=線(ライン)に関するオブジェクト。
 ブラシ=塗り潰しに関するオブジェクト。
 
CreateSolidBrush関数
論理ブラシを作成する。
(=ベタの塗り潰しブラシ)
→システムに認識(登録)するには、SelectObject関数を使う。
 →利用し終わったら、DeleteObject関数で破棄する。
CreateHatchBrush関数
ハッチ模様の論理ブラシを作成する。
(=線塗り潰しブラシ。*オプションによって、斜線、網などの模様選択可能。)
→システムに認識(登録)するには、SelectObject関数を使う。
 →利用し終わったら、DeleteObject関数で破棄する。

Rectangle関数
矩形を描画する。
RoundRect関数
角丸の矩形を描画する。

SetBkMode関数
背景のモードを設定する。
*テキストの背景モードなど。

Polygon関数
1つの閉じた、多角形を描画する。
PolyPolygon関数
複数の閉じた、多角形を描画する。

Ellips関数
楕円形を描画する。
Pie関数
扇形を描画する。
Arc関数
孤を描画する。

<4章>
GetLocalTime関数
現在のローカル日時を取得する。
SetTimer関数
タイマを作成する。
KillTimer関数
不要になったタイマを破棄する。
*SetTimer関数とセットで使う。
(=SetTimer関数で作成したタイマは、必ず破棄する必要がある。)
wsprintf関数
文字列を書式化する。
=文字列を、体裁を整えてバッファ(=変数)に書き込む。
*文字列を描画(=表示)する関数ではないので、勘違いしないように注意。
SetWindowText関数
タイトルバーの文字列表示を変更する。
*変更するための関数。
*デフォルトで表示させる文字列の設定は、
 CreateWindow関数でウィンドウを作成する際に設定する。
SendMessage関数
(ウィンドウプロシージャに向けて)メッセージを送信する。
DestroyWindows関数
ウィンドウを破棄する。
MessageBox関数
メッセージボックス(ウィンドウ)を作成・描画する


●ストックオブジェクト と 論理オブジェクト
ストックオブジェクト
あらかじめ、システムでデフォルトで用意されているオブジェクト。
例>ストックペン(=ストックオブジェクトペン)
  ストックブラシ(=ストックオブジェクトブラシ)

使い方>
GetStockObject関数で、指定。

SelectObject関数で、システムに認識させる。

DeleteObject関数で、開放させる。
論理オブジェクト(=Createオブジェクト)
自分で作成したオブジェクト。
例>論理ペン(=論理オブジェクトペン)
  論理ブラシ(=論理オブジェクトブラシ)

使い方>
Create〜関数で、指定。
(CreateFont関数、CreatePen関数、CreateSolidBrush関数、CreateHatchBrush関数など)

SelectObject関数で、システムに認識させる。

DeleteObject関数で、開放させる。

●breakとreturnについて
return
関数から抜ける。後ろに式が記述されている場合には、その式の値が関数の答えとなる。
=関数内で処理を行った結果(=戻り値)として、returnの後ろの式の内容を返す。

例>
処理1のみが実行される。
*処理2は、処理されないので、無意味。

関数名(引数){
変数;
処理1;
return 式;
処理2
}

break
while関数・for関数・switch関数 などのループから抜ける。
=繰り返しを強制終了する。
例>
while関数に突入
→if関数に突入
 →該当しないので、if関数から脱出
 →i++を実行
  →while関数を再突入
   →if関数に突入
    →該当するので、break実行(=forやwhileから脱出する)
     →while関数を脱出して、i=i*9を実行
     →returnを実行(=test1関数を終了し、iをtest1関数の結果値として返す)
結果、test1関数が返す結果値(=答え)は、9となる。

int test1(void){
 int i;
 i = 0;
  while(i<10){
   if(i==1){
    break;
   }
   i++;
  }
  i = i*9;
 return i;
}


例2>
swich関数に突入
→iの値は20なので、case20の内容(= i=i+2)を実行。
→breakが無いので、そのままcase30の内容も実行してしまう
 (= i=i+3を実行。)
 →breakが出てきたので、switch関数を抜ける。
  →returnを実行(=test1関数を終了し、iをtest1関数の結果値として返す)

結果、test1関数が返す結果値(=答え)は、25となる。 

int test1(void){
 int i;
 i = 20;
 switch(i){
  case 10:
      i = i+1;
      break;
  case 20:
      i = i+2;
  case 30:
      i = i+3;
      break;
  case 40:
      i = i+4;
      break;
 }
 return i;
}


参考:
無限ループの項目内にある、サンプルプログラムがわかりやすい
http://www.geocities.jp/ky_webid/c/014.html

TimeGetTime関数 と TimeGetSystemTime関数

前者は、システム時刻を返すのにDWORD(=unsigned int)を使う。
オーバーヘッドが少なく、精度は高い。
DWORDを使うので範囲の制限があり、制限を越えた長時間値を扱う場合には、
DWORDの範囲内をループ風に使うことで処理するため、最初に戻る時に遅延が発生して、
これは誤差となる。
*制限範囲内なら、ループすることもないので、誤差はない。
DWORDで表現できるのは、2の32乗ミリ秒までであり、
これは、日数に直すと49.71日になる。
(=Windows95の頃、49.71日以上連続稼動するとフリーズするという問題はこれが原因)
後者は、システム時刻を返すのにMMTIME構造体を使う。
別に用意された構造体を使うため、オーバーヘッドが生じるため、精度が低い。

参考:
http://www.microsoft.com/japan/developer/library/j...



レジストリ情報の取得
http://nhiro4.ld.infoseek.co.jp/program/windows/re...




授業内配布プリント 参考

●言語2 win32_83(=RSS取得プログラム)
<プログラムの概要>
DOMオブジェクトを作成
→XML読み込み
→DOMオブジェクトにXMLの情報を格納
→DOMオブジェクトから必要データを抽出。
参考:
http://www.grapecity.com/japan/devclub/consultants...
http://hp.vector.co.jp/authors/VA014436/prg_memo/w...
http://write.asahi.ne.jp/modules/xfsection/article...
http://yaino.com/gzudoc2/0001/000069.html
http://orangeknowledge.jpn.org/tips/mfc018.html

デバッグエラー発生対処
<1つ目>下記エラーが発生。
error C2872: 'IXMLDOMDocumentPtr' : あいまいなシンボルです。
error C2872: 'IXMLDOMElementPtr' : あいまいなシンボルです。
error C2872: 'IXMLDOMNodeListPtr' : あいまいなシンボルです。
error C2872: 'IXMLDOMNodePtr' : あいまいなシンボルです。
↓解決方法
それぞれのIXMLDOM〜という構造体の変数を定義(宣言)する際に、
IXMLDOM〜の前に、MSXML2::を付け足す。
例>
IXMLDOMDocumentPtr p aaaaa;
↓変更
MSXML2::IXMLDOMDocumentPtr aaaaa;

参考:
http://isobe.exblog.jp/m2005-10-12/#2309919
http://support.microsoft.com/default.aspx?scid=kb;...

<2つ目>下記エラーが発生
error LNK2019: 未解決の外部シンボル _WinMain@16 が関数 _WinMainCRTStartup で参照されました。
fatal error LNK1120: 外部参照 1 が未解決です。
↓解決方法
void main(){
を、下記に変更。
int WINAPI WinMain(HINSTANCE hCurInst, HINSTANCE hPrevInst, LPSTR lpsCmdLine, int nCmdShow){

WinMain関数は、windows.hのヘッダファイル内に、プロトタイプ宣言が記述されているらしいので、
WinMain関数の引数の、それぞれの型は、それらに合わせて記述する必要があるっぽい。

参考:
http://security.okwave.jp/kotaeru.php3?q=785295


●USBキャプチャ
参考:
http://aki.issp.u-tokyo.ac.jp/itoh/PukiWiki/pukiwi...
http://laputa.cs.shinshu-u.ac.jp/~gtakano/prog1.ht...

コメントをかく


「http://」を含む投稿は禁止されています。

利用規約をご確認のうえご記入下さい

▼当HP内検索▼

▼メインメニュー▼



管理者用リンク
書籍(技術書)
・利用ソフト一覧
・Ethereal/Wireshark

転送速度




・powershell

・VBA










・Microsoft SQLserver








●CentOS6.9


▼動画サーバ関係

MP3について
DVDからのMP3変換について?
DVDからの動画変換について



▼自転車関係
・Panasonic CRAZY BOY

▼自動車関係
・SUZUKI エブリワゴンDA62W


▼Linux/Unix関係
・Linux基礎(パッケージ)
・Linux基礎(システム構成)
・Linux(Debian)基本コマンド
・Linuxコマンド(テキスト処理)
・Linuxコマンド(未整理)
・Linuxコマンド(ネットワーク系)
・FedoraCore OS メモ
・Debian Linux OS メモ
・Vine Linux OS メモ
・xPUD メモ

・CentOS6.4(minimal)


・solaris9 メモ
・solaris10 メモ

▼CCNA関係


▼ノートPC関連

液晶パネル

Fujitsu FMV-820MT
・Compaq Evo Notebook N110
・Panasonic Let's note CF-S51R
・Toshiba Dynabook Satellite 1800


▼デスクトップPC関連
・AOpen AX3S Pro-U
・ASUS CUSL2
・ASUS CUSL2-M


▼携帯電話
・NTT DoCoMo FOMA M1000
・FOMA P704iμ


▼モデム関連
▼ADSLモデム
・NTT ADSLモデム-NV
・NEC PA-WD605CV
・NEC PA-WD701CV
▼アナログモデム
・GVC F-1156IV/R9

▼ルータ関連
▼ルータ
・OMRON MR504DV
・FON La Fonera FON2100E
・Cisco Cisco2620
・Cisco4500M
・Cisco1601
  Cisco1603-R
  Cisco1605

・Cisco 共通メモ

・BUFFALO BLR3-TX4L
・I・O DATA NP-BBR
・NEC PA-WB7000/B (AtermWB7000H)
・マイクロ総研 NetGenesis OPT
・Persol PBR001

・YAMAHA NetVolante RTA54i
・FUJITSU NetVehicle-I

▼イーサネットコンバータ関連
・LINKSYS WET11

▼TA関連
・NEC AtermIT60D1L(S)

▼ハブ関連
・Cisco Catalyst 2924-XL-EN
・AlliedTelesis CentreCOM8216XL2
・BUFFALO LSW10/100-8
・corega FSW-5PM
・corega HUB-5PM
・CONTEC RT-1216S

▼NIC関連
・BUFFALO WLI-U2-SG54HP
・PLANEX GW-NS54GMX
・NTT-ME MN SS-LAN CARD 11 HQ

▼プリンタサーバ関連
・corega Pserver
・I・O DATA PLANT ET-FPS1E

▼デジカメ関連
・MINOLTA DiMAGE F100

▼携帯電話ケーブル関連
・BUFFALO IGM-UPDC
・OMRON ME64KTID
・OMRON ME96KTI
・SOURCENEXT SUS-USB-02 REV.1
・UP12 USB-PDC Converter
・DAISO D106

▼その他PC周辺機器
●キーボード
・Bluetoothキーボード BK3001BA
●ハンディターミナル
・ENSO BHT-6500
●ダウンスキャンコンバータ
・SC-TVEX
●CD-ROMドライブ
・NEC CD-2800D
・BUFFALO CDN-D24EX
・BUFFALO DVM-RDM16IU2
●MOドライブ
・ELECOM LMO-230-S
・FUJITSU MCF3064SS
・FUJITSU SMB-640WL2
●スピーカー
・Justy JSP-10W
●MP3プレーヤ
・SanDisk sansa e130
・NHJ V@mp VP-415
●インタフェースカード
・玄人志向 USB2.0+1394a-CB
・nbj IDE-3525
・Notebook Power Sharing
●ACアダプタ
・Universal AC Adaptor
●マウス
・Logitec Marble Mouse
・needs progres TN-30RFMOSG
●タブレット
・WACOM FAVO(ET-0405-U)
●その他
・IDEAL ME-320X(ME-320U2F)
・KY-05046S-12-H
・LifeView USB CapView
・ハードウェア(その他)
●シリアルレベルコンバータ
・シリアルレベルコンバータ


▼Windows系メモ
・DOS起動ディスク
・Microsoft OS メモ
・Microsoft 系ソフト メモ
・その他 ソフトウェアメモ
・Network Notepad
・Packet Tracerメモ
・パノラマ写真作成ソフト
・トラブル対処履歴


▼プログラミング関連
・言語比較
・VBS
・卒研事前メモ
・卒研メモ
・Windowsプログラミング
・JANコード・ISBNコード相互変換
●C言語
・文字列
・ファイル操作
●アルゴリズム
・再帰アルゴリズム
●JAVA
・Javaプログラミング
●その他
・初心者プログラミング
・ソフトウェア未整理メモ



▼家電関連
●テレビ
・SHARP AQUOS LC-20D10
・FUNAI TV-14CP
・BLUEDOT BTV-900K
・AKART AK-FTV913
・REAL LIFE JAPAN IQ-191LEDTV
AQUOS DZ3シリーズのDLNA機能
Viera V1シリーズのDLNA機能
●プロジェクタ
・crenova XPE470
●AVセレクタ
・DataSystem AVS430
●ビデオ
・FUNAI TV-14CP
●HDD&DVDレコーダ
・Toshiba RD-XS46
・NEC PK-AX10
●DVDプレーヤー
・GREEN HOUSER GH-PDV9AT
・情熱価格 DVDJ-DQ03
●メディアプレーヤー
・MINI HD MEDIA BOX 1080P
・1080P FULL HD Media Player
・1080P HD Media Player Mini 1080
・HD media player

●チューナー
・COMTEC DTW700
・HUMAX CI-S1

●アンテナ
・ADDZEST ZCP107
・マルハマ AGS-590

●ヘッドマウントディスプレイ
・VIRTUAL i/O i-glasses
●電動歯ブラシ
・ブラウン電動歯ブラシ
●電話機
・SHARP DA-C5-B
●コードレス電動ドリル、ドライバ
・BLACK&DECKER CSD300T
・RELIEF 30946?

▼カーナビ関係
Panasonic CN-GP510VD
Panasonic CN-G1100VD
▼カーステレオ関係
Kenwood U585SD

▼おもちゃ関連
●ラジコン
・ラジコンのプロポ改造


▼カー用品関連
●インダッシュTV
・ADDZEST TVS6250


▼DIY関連
・懸垂スタンド
・蓄光塗料


▼電子工作関係
・コネクタピンアサイン
・LANケーブルをAVケーブル化
・LANケーブルをRGBケーブル化
・地上デジタル放送アンテナ
・電子工作 メモ
・乾電池を充電


▼デザイン関連
●腕時計
・腕時計


▼その他

・HP製作関連メモ
・アイデアメモ

・コラム・メモ
・趣味・興味


・ToDo
・ネットインフラ?


▼資格・履歴書・マナー
・資格取得メモ
・工事担任者対策メモ
・履歴書・職務経歴書
・答辞


▼修学旅行 フランス(パリ)


▼掲示板
●掲示板
 意見・苦情・質問用に仮設置。

▼フリーエリア▼

▼おしらせ▼

管理人/副管理人のみ編集できます