Trang 2 trên tổng số 2 Đầu tiênĐầu tiên 12
Từ 11 tới 20 trên tổng số 20 kết quả

Đề tài: Nhập xuất tiếng Việt trong Console (cmd.exe)

  1. #11
    Ngày gia nhập
    08 2017
    Bài viết
    3,058

    Mặc định Nhập xuất tiếng Việt trong Console (cmd.exe)

    Bằng mắt người, tôi không phân biệt được chuỗi, nó encode bằng loại nào: MCS/UCS/UTF,



    còn bạn thì sao?

  2. #12
    Ngày gia nhập
    08 2017
    Bài viết
    3,058

    Xác định được giúp tránh được kết quả khác mong đợi

    C Code:
    1. //cl.exe /nologo /EHsc /MDd wStr.cpp
    2.  
    3. #include <fcntl.h> //_O_xTEXT
    4. #include <io.h>    //_setmode
    5. #include <stdio.h>  
    6.  
    7. int main( ){  
    8.     int result = _setmode(_fileno(stdout), _O_WTEXT); //_O_WTEXT
    9.     if (result == -1) perror( "Cannot set mode" );
    10.  
    11.     wprintf(L"Tiếng Việt cho i tờ.\n"); //UTF-8
    12.  
    13.     return 0;  
    14. }


  3. #13
    Ngày gia nhập
    08 2017
    Bài viết
    3,058

    C Code:
    1. //cl.exe /nologo /EHsc /MDd wStr2.cpp
    2.  
    3. #include <fcntl.h> //_O_xTEXT
    4. #include <io.h>    //_setmode
    5. #include <stdio.h>  
    6.  
    7. int main( ){  
    8.     int result = _setmode(_fileno(stdout), _O_WTEXT);
    9.     if (result == -1) perror( "Cannot set mode" );
    10.  
    11.     wprintf(L"Tiếng Việt cho i tờ.\n"); //UCS-2 LE
    12.  
    13.     return 0;  
    14. }

  4. #14
    Ngày gia nhập
    12 2015
    Nơi ở
    Đà Nẵng
    Bài viết
    446

  5. #15
    Ngày gia nhập
    08 2017
    Bài viết
    3,058

    Có nhiều bài viết để xem thêm

    C Code:
    1. //cl.exe /nologo /W3 /MDd user32.lib wStr.cpp
    2.  
    3. //#include <fcntl.h> //_O_xTEXT
    4. #include <io.h>    //_setmode
    5. #include <stdio.h>  
    6. #include <Windows.h>  
    7.  
    8. int main( ){  
    9.     int result = _setmode(1, 0x10000); //_fileno(stdout) and _O_WTEXT
    10.     if (result == -1) perror( "Cannot set mode" );
    11.  
    12.     wchar_t *sMsg = L"Tiếng Việt cho i tờ.\n"; //Encoding UTF/UCS ...
    13.     //Console
    14.     wprintf(sMsg);
    15.     //GUI
    16.     MessageBoxW(0, sMsg, L"Nhập xuất tiếng Việt trong C..", 0);
    17.  
    18.     return 0;  
    19. }
    encoding có ảnh hưởng đến việc hiện thị khi chạy

    bài còn, bài mất, lẽ thường - làm chi còn mãi, sống mãi

  6. #16
    Ngày gia nhập
    08 2017
    Bài viết
    3,058

    Mặc định Nhập xuất tiếng Việt trong Console (cmd.exe)

    Không chỉ trong console, mà cả trong GUI cũng cần phải biết
    This is a common dialog for opening files. Do not use UNICODE to compile this example.
    C Code:
    1. #include <windows.h>
    2.  
    3. LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
    4. void CreateMenubar(HWND);
    5. void OpenDialog(HWND);
    6. void LoadFile(LPSTR);
    7.  
    8. #define IDM_FILE_NEW 1
    9. HWND ghwndEdit;
    10.  
    11.  
    12. int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
    13.     LPSTR lpCmdLine, int nCmdShow) {
    14.    
    15.   MSG  msg ;    
    16.   WNDCLASS wc = {0};
    17.   wc.lpszClassName = TEXT( "Opendialog" );
    18.   wc.hInstance     = hInstance ;
    19.   wc.hbrBackground = GetSysColorBrush(COLOR_3DFACE);
    20.   wc.lpfnWndProc   = WndProc ;
    21.   wc.hCursor       = LoadCursor(0, IDC_ARROW);
    22.  
    23.  
    24.   RegisterClass(&wc);
    25.   CreateWindow( wc.lpszClassName, TEXT("Opendialog"),
    26.                 WS_OVERLAPPEDWINDOW | WS_VISIBLE,
    27.                 150, 150, 265, 200, 0, 0, hInstance, 0);  
    28.  
    29.   while( GetMessage(&msg, NULL, 0, 0)) {
    30.     DispatchMessage(&msg);
    31.   }
    32.  
    33.   return (int) msg.wParam;
    34. }
    35.  
    36. LRESULT CALLBACK WndProc( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) {
    37.    
    38.   switch(msg) {
    39.  
    40.       case WM_CREATE:
    41.           ghwndEdit = CreateWindowEx(WS_EX_RIGHTSCROLLBAR, TEXT("edit"), NULL,
    42.                     WS_VISIBLE | WS_CHILD | WS_HSCROLL | WS_VSCROLL | ES_MULTILINE,
    43.                     0, 0, 260, 180,
    44.                     hwnd, (HMENU) 1, NULL, NULL);
    45.  
    46.  
    47.           CreateMenubar(hwnd);
    48.           break;
    49.  
    50.       case WM_SIZE:
    51.           SetWindowPos(ghwndEdit, NULL, 0, 0, LOWORD(lParam), HIWORD(lParam),
    52.              SWP_NOMOVE | SWP_NOZORDER);
    53.           break;
    54.  
    55.       case WM_COMMAND:
    56.           if (wParam==IDM_FILE_NEW) {
    57.               OpenDialog(hwnd);
    58.           }
    59.           break;
    60.  
    61.       case WM_DESTROY:
    62.           PostQuitMessage(0);
    63.           break;
    64.   }
    65.  
    66.   return DefWindowProc(hwnd, msg, wParam, lParam);
    67. }
    68.  
    69. void CreateMenubar(HWND hwnd) {
    70.  
    71.   HMENU hMenubar;
    72.   HMENU hMenu;
    73.  
    74.   hMenubar = CreateMenu();
    75.   hMenu = CreateMenu();
    76.   AppendMenu(hMenubar, MF_POPUP, (UINT_PTR)hMenu, TEXT("&File"));
    77.   AppendMenu(hMenu, MF_STRING, IDM_FILE_NEW, TEXT("&Open"));
    78.   SetMenu(hwnd, hMenubar);
    79. }
    80.  
    81. void OpenDialog(HWND hwnd) {
    82.  
    83.   OPENFILENAME ofn;
    84.   TCHAR szFile[MAX_PATH];
    85.  
    86.   ZeroMemory(&ofn, sizeof(ofn));
    87.   ofn.lStructSize = sizeof(ofn);
    88.   ofn.lpstrFile = szFile;
    89.   ofn.lpstrFile[0] = '\0';
    90.   ofn.hwndOwner = hwnd;
    91.   ofn.nMaxFile = sizeof(szFile);
    92.   ofn.lpstrFilter = TEXT("All files(*.*)\0*.*\0");
    93.   ofn.nFilterIndex = 1;
    94.   ofn.lpstrInitialDir = NULL;
    95.   ofn.lpstrFileTitle = NULL;
    96.   ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST;
    97.  
    98.   if(GetOpenFileName(&ofn))
    99.       LoadFile(ofn.lpstrFile);
    100. }
    101.  
    102. void LoadFile(LPSTR file) {
    103.  
    104.   HANDLE hFile;
    105.   DWORD dwSize;
    106.   DWORD dw;
    107.  
    108.   LPBYTE lpBuffer = NULL;
    109.  
    110.   hFile = CreateFile(file, GENERIC_READ, 0, NULL, OPEN_EXISTING, 0, NULL);
    111.   dwSize = GetFileSize(hFile, NULL);
    112.   lpBuffer = (LPBYTE) HeapAlloc(GetProcessHeap(),
    113.       HEAP_GENERATE_EXCEPTIONS, dwSize + 1);
    114.   ReadFile(hFile, (LPWSTR)lpBuffer, dwSize, &dw, NULL);
    115.   CloseHandle(hFile);
    116.   lpBuffer[dwSize] = 0;
    117.   SetWindowText(ghwndEdit, (LPSTR) lpBuffer);
    118.   HeapFree(GetProcessHeap(), 0, lpBuffer);
    119. }
    bạn có thể sửa nó, cho phép nhập xuất tiếng Việt?

    Nguồn:
    http://zetcode.com/gui/winapi/dialogs/

  7. #17
    Ngày gia nhập
    08 2017
    Bài viết
    3,058

    Thêm Unicode
    #define UNICODE
    và sai đâu sửa đó (thay LPSTR bằng LPCWSTR, ...) nó chạy, song tiếng Việt quốc ngữ giống chữ tượng hình (CJK, CJKV)



    Cần thêm hàm chuyển: nó không hiểu trực tiếp như ANSI.
    Bữa sau nói tiếp

  8. #18
    Ngày gia nhập
    08 2017
    Bài viết
    3,058

    Biên dịch bằng vc (vs) cũng có cái dở, nó gắn liền với phiên bản cụ thể, trong khi code không dùng, không gọi hàm nào trong MsVcRxyz.dll

    http://thuthuat.taimienphi.vn/sua-loi-msvcr100dll-is-missing-khi-chay-phan-mem-1918n.aspx

  9. #19
    Ngày gia nhập
    08 2017
    Bài viết
    3,058

    Trên (#18) là lỗi của người biên dịch, người dùng biết để sửa, thay vì người gây lỗi phải sửa! Có cách sửa, lúc khác nói.

    Trước khi quay lại chuyện cái lu, nói chuyện customize giảm stress:

    Change the default of encoding in Notepad
    https://superuser.com/questions/1199004/change-the-default-of-encoding-in-notepad

  10. #20
    Ngày gia nhập
    08 2017
    Bài viết
    3,058

    Combo box & List box
    A combo box is a combination of an edit box or static text and a list. A combo box is used when we need to select an item from a list of available options.

    Mã nguồn:
    http://zetcode.com/gui/winapi/controlsIII/

    Thay chuỗi tiếng Việt
    C++ Code:
    1.     const wchar_t *items[] = {
    2.         //L"FreeBSD", L"OpenBSD", L"NetBSD", L"Solaris", L"Arch"
    3.         L"Đinh", L"Lê", L"Lý", L"Trần", L"Nguyễn"
    4.     };
    nó cũng hiện ký hiệu lạ, khác mong đợi

    phải set font cho nó hiện thị đúng.

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn