带有Unicode的c ++ Winapi对话框

时间:2017-10-23 15:26:02

标签: c++

我只是在WINAPI中关注一些例子。但我有一些问题。

#include <Windows.h>
#include "resource.h"
#include <stdio.h>
#define BUFSIZE 25

LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
HINSTANCE g_hinst;
LPCTSTR lpszClass = TEXT("DialogBox");


BOOL CALLBACK DlgProc(HWND, UINT,WPARAM,LPARAM);


void DisplayText(TCHAR* fmt, ...);
HWND hEdit1, hEdit2; //editcontrol

int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpszCmdParam, int nCmdShow)
{

DialogBox(hInstance,MAKEINTRESOURCE(IDD_DIALOG1),NULL,DlgProc);
return 0;
}//end of winmain func



LRESULT CALLBACK WndProc(HWND hWnd, UINT iMessage, WPARAM wParam, LPARAM lParam)
{
switch (iMessage)
{
case WM_DESTROY:
    PostQuitMessage(0);
    return 0;
}
return(DefWindowProc(hWnd, iMessage, wParam, lParam));
}
// Error? ==============================
void DisplayText(TCHAR *fmt, ...)
{    
va_list arg;
va_start(arg, fmt);
TCHAR cbuf[BUFSIZE + 256];
vswprintf(cbuf, fmt, arg);


int iLength = GetWindowTextLength(hEdit2);
SendMessage(hEdit2, EM_SETSEL, iLength, iLength);
SendMessage(hEdit2, EM_REPLACESEL, FALSE, (LPARAM)cbuf);

va_end(arg);
 // Error? ==============================
}

BOOL CALLBACK DlgProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
static TCHAR buf[BUFSIZE + 1];

switch (uMsg)
{
case WM_INITDIALOG:
    //InputString, 
    hEdit1 = GetDlgItem(hDlg,IDC_EDIT1);
    //Outputstring, 
    hEdit2 = GetDlgItem(hDlg,IDC_EDIT2);

    //SET MAX stringNum
    SendMessage(hEdit1,EM_SETLIMITTEXT,BUFSIZE,0);

    return TRUE;

case WM_COMMAND:
    switch (LOWORD(wParam))
    {
    case IDOK:
        GetDlgItemText(hDlg,IDC_EDIT1,buf,BUFSIZE+1);
        DisplayText(L"%S\n",buf);
        SendMessage(hEdit1,EM_SETSEL,0,-1);
        return TRUE;
    case IDCANCEL:
        EndDialog(hDlg,IDCANCEL);
        return TRUE;
    }
    return FALSE;
}
return FALSE;
}

这是我在Dialogbox中打印输出文本的代码。 当我在EditControl中输入句子时,如“Hi there”,那么它只打印出“H”。我不知道为什么.. 似乎Unicode在我的代码中工作不好.. 有人能帮帮我吗?感谢。

0 个答案:

没有答案