NOEMBLEM/エンブレムが設定されていません。

メールの詳細(トピック表示)

DrawTextについてお聞きしたいのですが

投稿者: さん  2004/02/20 22:50  MLNo.427   [メール表示]

#include<windows.h>

char szClassName[] = "ウィンドウクラスネーム";
LRESULT CALLBACK WndProc(HWND hWnd,UINT msg,WPARAM wParam,LPARAM
lParam);

int WINAPI WinMain(HINSTANCE hInstl,HINSTANCE hPerInst,LPSTR
lpszCL,int nCmdShow)
{
MSG msg;
WNDCLASSEX myProg;
HWND hWnd;


ZeroMemory(&myProg,sizeof(WNDCLASSEX));

if(!hPerInst)
{
myProg.cbSize =sizeof(WNDCLASSEX);
myProg.style =CS_HREDRAW | CS_VREDRAW;
myProg.lpfnWndProc =WndProc;
myProg.cbClsExtra =0;
myProg.cbWndExtra =0;
myProg.hInstance =hInstl;
myProg.hIcon =NULL;
myProg.hCursor =LoadCursor(NULL,IDC_ARROW);
myProg.hbrBackground = (HBRUSH)GetStockObject
(BLACK_BRUSH);
//myProg.hbrBackground =(HBRUSH)GetStockObject
(WHITE_BRUSH);
myProg.lpszMenuName =NULL;
myProg.lpszClassName =szClassName;

if(!RegisterClassEx(&myProg))
return FALSE;
}

hWnd = CreateWindow(szClassName,"サウンドノベ
ル",WS_OVERLAPPEDWINDOW,128,128,640,480,NULL,NULL,hInstl,NULL);
ShowWindow(hWnd,nCmdShow);
UpdateWindow(hWnd);

while(GetMessage(&msg,NULL,0,0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return (msg.wParam);
}


LRESULT CALLBACK WndProc(HWND hWnd,UINT msg,WPARAM wParam,LPARAM
lParam)
{
switch(msg)
{
case WM_DESTROY:
PostQuitMessage(0);
break;
}
return(DefWindowProc(hWnd,msg,wParam,lParam));
}
これを実行すると背景が黒いWINDOWがでます。
そのあとにDrawTextを使って白い文字で文字を表示したいのですが
そうすればいいのでしょうか
もしよろしければ教えてください。


このエントリーをはてなブックマークに追加


  • MLNo.428   "Isao SHIMAKURA"さん  (0) 2004/02/21 00:48  [メール表示する]
     島倉です。

     ウィンドウに文字を表示するだけなら、以下のWM_PAINTメッセー
    ジを処理するコードをメッセージプロシージャに追加してください。

    case WM_PAINT:
    {
    RECT rc = { 0, 380, 640, 480 };
    PAINTSTRUCT ps;
    HDC hdc;
    hdc = BeginPaint(hWnd, &ps);
    SetBkMode(hdc, TRANSPARENT);
    SetTextColor(hdc, RGB(255,255,255));
    DrawText(hdc, "へろへろ〜ん", -1, &rc, DT_LEFT);
    EndPaint(hWnd, &ps);
    }
    return 0;

     表示される文字のフォントは環境に依存するので、レイアウトを
    保つためには工夫が必要です。

    #次は「一文字ずつ表示されるようにするには?」かな。

    Isao SHIMAKURA (ISLe)
    isle.shimakura@…

    ----- Original Message -----
    From: "秋凪" <uruzu777@…>
    To: <beginers@…>
    Sent: Friday, February 20, 2004 10:50 PM
    Subject: [beginers:0427] DrawTextについてお聞きしたいのですが


  • MLNo.429   さん  (0) 2004/02/21 17:57  [メール表示する]
    > case WM_PAINT:
    > {
    > RECT rc = { 0, 380, 640, 480 };
    > PAINTSTRUCT ps;
    > HDC hdc;
    > hdc = BeginPaint(hWnd, &ps);
    > SetBkMode(hdc, TRANSPARENT);
    > SetTextColor(hdc, RGB(255,255,255));
    > DrawText(hdc, "へろへろ〜ん", -1, &rc, DT_LEFT);
    > EndPaint(hWnd, &ps);
    > }
    > return 0;
    上記の文で無事にできました。多謝!
    次もお聞きしたいのでですがWM_LBUTTONDOWNをつかって
    サウンドノベルのように・・・1行づつ表示して、ある行までいったらページを
    改行して次の文を表示するにはどうするればいいのでしょうか
    説明下手ですいません。
    サウンドノベルを頭に浮かべてくれるとよくわかると思います。



  • MLNo.430   "Isao SHIMAKURA"さん  (0) 2004/02/21 23:27  [メール表示する]
     島倉です。

    > 次もお聞きしたいのでですがWM_LBUTTONDOWNをつかって
    > サウンドノベルのように・・・1行づつ表示して、ある行までいったらページを
    > 改行して次の文を表示するにはどうするればいいのでしょうか

     全部説明すると本ができる位のボリュームになるので、要点だけ
    紹介します。


     ゲーム部分のメインルーチンは、以下のいずれかの方法で呼び出
    すようにします。

     1) タイマーを使ってイベントで呼び出す。
    (SetTimer / KillTimer API 、WM_TIMER)
    2) メッセージ処理の空き時間を使って呼び出す。
       (GetMessage → PeekMessage)


     GetTickCount(あるいはtimeGetTime) APIで経過時間を取得して
    徐々に文字列の参照位置を変化させていくことで、少しずつ文章が
    表示されていくように見せることができます。


     WM_PAINTメッセージで描画するとちらつくので、オフスクリーン
    と呼ばれる仮想画面を作り、描画はオフスクリーンに対して行い、
    ウィンドウに対してはオフスクリーンを転送するようにします。
     オフスクリーンは、CreateCompatibleBitmap APIで作成します。


     マウスボタンで先へ進むようにするには、WM_LBUTTONDOWN /
    WM_LBUTTONUPイベントに対応して変数を書き換えてボタンを押して
    いるときがプログラム内で分かるようにしておいて、ゲームのメイ
    ンルーチンで、必要に応じてボタンが押されていなかったら先へ進
    まないようにします。
     GetAsyncKeyState APIを使うとイベントを処理しなくてもマウス
    ボタンの状態が取得できます。



     実際にはテキストを表示するだけではないので、ゲームのメイン
    ルーチンはいろいろと複雑です。文字を描画するにももっと凝った
    やり方があるのですが、とりあえず文字の表示だけができるように
    なるまで頑張ってください。

    Isao SHIMAKURA (ISLe)
    isle.shimakura@…
    ----- Original Message -----
    From: "秋凪" <uruzu777@…>
    To: <beginers@…>
    Sent: Saturday, February 21, 2004 5:57 PM
    Subject: [beginers:0429] Re: DrawTextについてお聞きしたいのですが



メールへの返信はMLのメンバーしかできません。

更新順メールリスト