僕は予約開始が始業時間と重なって
まだ29日の本予約が残っているので油断はできませんが、機種変更にグッと近づいたと言えるでしょう。
モチベーションが高まったところで、発売まで残り1ヶ月弱の間、WindowsMobileでのプログラム開発の勉強でもしていようと思います。
Windows Mobile 6 SDKその他はインストール済みなので、 マイクロソフトのページにあるサンプルを入力して実行してみます。
ものすごく遅い(笑
やはり.NETは起動がもたつきますね。
新機種になればいくらかは改善するのかもしれませんが、ネイティブで開発する方法も勉強しておいた方がよさそうです。
ということで、早速 Visual Studioで新しいプロジェクトを作成。
プロジェクトの種類で「Visual C++」-「スマートデバイス」、テンプレートで「Win32スマートデバイス プロジェクト」を選択。
プラットフォーム画面で選択されたSDKを「Pocket PC 2003」から「Windows Mobile 6 Professional」に変更。
自動生成された雛形にコードを追加していきます。
#include "stdafx.h" #include "WMSample01.h" #include <windows.h> #include <commctrl.h> #include <winsock2.h> #include <ws2tcpip.h> : void ShowMessage(HWND hWnd); int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow) { : } LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { int wmId, wmEvent; PAINTSTRUCT ps; HDC hdc; static SHACTIVATEINFO s_sai; switch (message) { case WM_COMMAND: wmId = LOWORD(wParam); wmEvent = HIWORD(wParam); // 選択されたメニューの解析: switch (wmId) { case IDC_BUTTON1: ShowMessage(hWnd); break; case IDM_HELP_ABOUT: DialogBox(g_hInst, (LPCTSTR)IDD_ABOUTBOX, hWnd, About); break; case IDM_OK: SendMessage (hWnd, WM_CLOSE, 0, 0); break; default: return DefWindowProc(hWnd, message, wParam, lParam); } break; case WM_CREATE: SHMENUBARINFO mbi; memset(&mbi, 0, sizeof(SHMENUBARINFO)); mbi.cbSize = sizeof(SHMENUBARINFO); mbi.hwndParent = hWnd; mbi.nToolBarId = IDR_MENU; mbi.hInstRes = g_hInst; if (!SHCreateMenuBar(&mbi)) { g_hWndMenuBar = NULL; } else { g_hWndMenuBar = mbi.hwndMB; } // shell アクティベート情報のストラクチャを初期化します。 memset(&s_sai, 0, sizeof (s_sai)); s_sai.cbSize = sizeof (s_sai); CreateWindow(_T("BUTTON"), _T("button1"), WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, 78, 45, 72, 20, hWnd, (HMENU)IDC_BUTTON1, g_hInst, NULL); break; : } return 0; } : void ShowMessage(HWND hWnd) { WSADATA wsaData; _TCHAR msg[256]; char hostname[256]; _TCHAR _hostname[256]; int len; WSAStartup(MAKEWORD(2,2), &wsaData); gethostname(hostname, 256); len = MultiByteToWideChar(CP_ACP, 0, hostname, -1, _hostname, 0); MultiByteToWideChar(CP_ACP, 0, hostname, -1, _hostname, len); swprintf(msg, _T("host=%s"), _hostname); WSACleanup(); MessageBox(hWnd, (LPCWSTR)msg, _T("ホスト名"), MB_OK); }
WinSockを使っているので、Ws2.libをリンクするように指定しておきます。
(僕は普通のWin32APIのつもりでWS2_32.Libを一生懸命探していました。)
本当はC#のサンプルと同じようにIPアドレスを取得したかったのですが なぜかうまく動かず、 時間切れで断念してしまいました。
また久しぶりのCで、文字列操作がかなりあやふやになっています。
じっくり勉強する時間が欲しいですね。
0 件のコメント:
コメントを投稿