wsprintfで書式指定するつもりが、改行できない
wsprintfじゃ \n( \はyenマークです)が使えないのかしら。(%d)とかは使えるのにね。何故が出力すると(↑)に変換されてしまう。・・・うえ?
まぁ解決手段は考えれば他にもあるからそこまで深刻な問題ってわけでもないけど。
ちなみに伝統と実績の『猫でもわかる第四版』をみながらたらたらと適当にやってたものです。
以下ソースコード
#include
//プロトタイプ宣言
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
ATOM InitApp(HINSTANCE);
BOOL InitInstance(HINSTANCE, int);
//ウィンドウクラス
TCHAR szClassName[] = TEXT("sample01");
//windowsプログラムのエントリーポイント
int WINAPI WinMain(HINSTANCE hCurInst, HINSTANCE hPrevInst, LPSTR lpsCmdLine, int nCmdShow)
{
MSG msg;
BOOL bRet;
if(!InitApp(hCurInst))return false;
if(!InitInstance(hCurInst, nCmdShow))return false;
//メッセージ取得
while((bRet = GetMessage(&msg, NULL, 0, 0)) != 0){
if(bRet == -1){
break;
}else{
TranslateMessage(&msg); //メッセージを変換
DispatchMessage(&msg); //メッセージを送出
}
}
return (int)msg.wParam;
}
//ウィンドウクラスの登録
ATOM InitApp(HINSTANCE hInst)
{
WNDCLASSEX wc;
wc.cbSize = sizeof(WNDCLASSEX); //構造体のサイズ
wc.style = CS_HREDRAW | CS_VREDRAW; //クラスのスタイル
wc.lpfnWndProc = WndProc; //プロシージャ名
wc.cbClsExtra = 0; //補助メモリ
wc.cbWndExtra = 0; //補助メモリ
wc.hInstance = hInst; //インスタンス
//アイコン
wc.hIcon = (HICON)LoadImage(NULL, MAKEINTRESOURCE(IDI_APPLICATION), IMAGE_ICON, 0, 0, LR_DEFAULTSIZE | LR_SHARED);
//カーソル
wc.hCursor = (HCURSOR)LoadImage(NULL, MAKEINTRESOURCE(IDC_ARROW), IMAGE_CURSOR, 0, 0, LR_DEFAULTSIZE | LR_SHARED);
//背景ブラシ
wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
wc.lpszMenuName = NULL; //メニュー名
wc.lpszClassName = szClassName; //クラス名
//小さいアイコン
wc.hIconSm = (HICON)LoadImage(NULL, MAKEINTRESOURCE(IDI_APPLICATION), IMAGE_ICON, 0, 0, LR_DEFAULTSIZE | LR_SHARED);
return (RegisterClassEx(&wc));
}
//ウィンドウの生成
BOOL InitInstance(HINSTANCE hInst,int nCmdShow)
{
HWND hWnd;
hWnd = CreateWindow(szClassName, //クラス名
TEXT("猫4版_P13_空ウィンドウ雛形"), //ウィンドウ名
WS_OVERLAPPEDWINDOW, //ウィンドウスタイル
CW_USEDEFAULT, //x位置
CW_USEDEFAULT, //y位置
CW_USEDEFAULT, //ウィンドウ幅
CW_USEDEFAULT, //ウィンドウ高さ
NULL, //親ウィンドウのハンドル。小屋を作るときはNULL
NULL, //メニューハンドル、クラスメニューを使うときはNULL
hInst, //インスタンスハンドル
NULL //ウィンドウ作成データ
);
if(!hWnd)return false;
ShowWindow(hWnd, nCmdShow); //ウィンドウの表示状態を設定
UpdateWindow(hWnd); //ウィンドウを更新
return true;
}
//ウィンドウプロシージャ(callback関数)・・・・・最重要!!!!!!!
//windowsプログラムはただ処理順にソースを書くのではなく、
//受け取ったメッセージごとに合わせた処理を書く。
//(下のswitch文[WM_XXXXX]の部分が受け取ったメッセージに該当)
LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp)
{
//表示する文字列の宣言
PAINTSTRUCT ps;
HDC hdc;
LPCSTR lpszStr = TEXT("猫でもわかる\nWindowsプログラミング。"); //TEXTマクロについてはP419
//デバッグ用に使いたいときはwsprintfを使う。猫4P123
//実験(wsprintfの使用)-------------------------------------------------------------
TCHAR StrOutPut[256]; //文字列と書式設定格納するアレ
//書式指定のテスト
wsprintf(StrOutPut,TEXT("デデンデッデデンデン\nデデンデッデデンデン_× %d \nバトルフィールド作業中に聞いてたので・・・\n"),4);
//end------------------------------------------------------------------------------
switch(msg){
case WM_PAINT:
hdc = BeginPaint(hWnd, &ps); //デバイスコンテキストを取得
//TextOutは\系が使用できない。
TextOut(hdc, 10, 10, lpszStr, lstrlen(lpszStr)); //文字列を描画
//wsprintfを用いての文字列出力-------------------------------------------------
TextOut(hdc, 50, 50, StrOutPut, lstrlen(StrOutPut));
//-----------------------------------------------------------------------------
EndPaint(hWnd, &ps); //描画を終了
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return (DefWindowProc(hWnd, msg, wp, lp));
}
return 0;
}
ちなみにゲーム制作は絶賛停滞中です。