我只是在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在我的代码中工作不好.. 有人能帮帮我吗?感谢。