Thursday, February 21, 2008

時間表示プログラム

Chapter 4:
GetLocalTime(
  • LPSYSTEMTIME lpSystemTime
);
この関数で時間情報をシステムから取得し,構造体SystemTimeで保持する.
SystemTime構造:
typedef struct _SYSTEMTIME{
  • WORD wYear;
  • WORD wMonth;
  • WORD wDayOfWeek;
  • WORD wDay;
  • WORD wHour;
  • WORD wMinute;
  • WORD Second;
  • WORD wMilliseconds;
} SYSTEMTIME, *PSYSTEMTIME;
時間取得するにはWindowsは駆動型だからシステムから定期的にあるメッセージが送られれてきて,このメッセージが来たら,時間を取得するという仕組みになっている.この定期的なメッセージが来るようにするにはSetTimer()関数を使用.
UINT_PTR SetTimer(
  • HWND hWnd,
  • UINT_PTR nIDEvent, // タイマID
  • UINT uElapse, // タイムアウト値 単位はミリセコンド
  • TIMERPROC lpTimerFunc //タイマのプロシージャ
);
最後のパラメータはNULLにするとhWndのプロシージャで処理することになる.
プロシージャへ送られるメッセージは副メッセージもやってくる.その副メッセージはプロシージャ引数の最後の2つであるWPARAM, LPARAMである.
WM_TIMERのときはwParamにはタイマID,lParamにはタイマのプロシージャのアドレス(SetTimer関数の第4引数)が入る.
タイマが不要になったらKillTimer()関数を使用.
BOOL KillTimer(
  • HWND hWnd,
  • UINT_PTR uIDEvent
);

Wednesday, February 20, 2008

Windowsプログラミングの厄介な型のまとめ

Windowsプログラミングではたくさんのデータ型がある.慣れるしかないな~
Windowsのデータ型まとめ:




LPCSTR(pointer const string??) => const CHAR *
LPCWSTR => const WCHAR *
CHAR => char
TCHAR => WCHAR => wchar_t -> Unicode
WORD => unsigned short
DWORD => unsigned long



Windowsのハンガリー記述法まとめ:




c char
by, b BYTE
n short, int
b,f BOOL(int)
w WORD or UINT
l LONG
dw DWORD
fn pointer to function
s string
sz ASCII string
p,lp pointer




Unicodeの文字はワイドCHARで,C言語ではこれ表すがたはwchar_t(2bytes)
C言語でwchar_tの使い方は:

#include 
#include

int main(void)
{
wchar_t waidomoji[10] = L"漢字";//Lマクロに注意

setlocale(LC_ALL, "japanese");
wprintf(L"%s\n", waidomoji);
return 0;
}
WindowsではTEXT("...")マクロとTCHARを一緒に使うとUnicodeになる.
TEXT(quote) => __TEXT(quote) =>
Lquote
次の使い方もある
(LPCWSTR)L"Wide Char Message"