Từ 1 tới 5 trên tổng số 5 kết quả

Đề tài: Làm sao để hiển thị tiếng Việt?IDE:CodeBlock, Compiler:MingW

  1. #1
    Ngày gia nhập
    08 2006
    Bài viết
    60

    Mặc định Làm sao để hiển thị tiếng Việt?IDE:CodeBlock, Compiler:MingW

    Chào mọi người!
    Tui đang xài CodeBlock để viết chương trình. Thằng này hiển thị được tiếng Việt có dấu(dán chứ đừng gõ), khi dịch xong thì hiển thị 0 được. Không biết cái này là lỗi của chương trình dịch hay là do IDE. Nếu do chương trình dịch vậy thì GCC không hỗ trợ unicode. Cái này hình như sai vì tui có thấy có nhiều chương trình mã nguồn hỗ trợ unicode mặc dù xài GCC
    Chương trình của tui
    Code:
    #include <windows.h>
    
    /*  Declare Windows procedure  */
    LRESULT CALLBACK WindowProcedure (HWND, UINT, WPARAM, LPARAM);
    
    /*  Make the class name into a global variable  */
    char szClassName[ ] = "meomeo";
    
    int WINAPI WinMain (HINSTANCE hThisInstance,
                         HINSTANCE hPrevInstance,
                         LPSTR lpszArgument,
                         int nCmdShow)
    {
        HWND hwnd;               /* This is the handle for our window */
        MSG messages;            /* Here messages to the application are saved */
        WNDCLASSEX wincl;        /* Data structure for the windowclass */
    
        /* The Window structure */
        wincl.hInstance = hThisInstance;
        wincl.lpszClassName = szClassName;
        wincl.lpfnWndProc = WindowProcedure;      /* This function is called by windows */
        wincl.style = CS_DBLCLKS;                 /* Catch double-clicks */
        wincl.cbSize = sizeof (WNDCLASSEX);
    
        /* Use default icon and mouse-pointer */
        wincl.hIcon = LoadIcon (NULL, IDI_APPLICATION);
        wincl.hIconSm = LoadIcon (NULL, IDI_APPLICATION);
        wincl.hCursor = LoadCursor (NULL, IDC_ARROW);
        wincl.lpszMenuName = NULL;                 /* No menu */
        wincl.cbClsExtra = 0;                      /* No extra bytes after the window class */
        wincl.cbWndExtra = 0;                      /* structure or the window instance */
        /* Use Windows's default colour as the background of the window */
        wincl.hbrBackground = (HBRUSH) COLOR_BACKGROUND;
    
        /* Register the window class, and if it fails quit the program */
        if (!RegisterClassEx (&wincl))
            return 0;
    
        /* The class is registered, let's create the program*/
        hwnd = CreateWindowEx (
               0,                   /* Extended possibilites for variation */
               szClassName,         /* Classname */
               "cây cân bằng",       /* Title Text */
               WS_OVERLAPPEDWINDOW, /* default window */
               CW_USEDEFAULT,       /* Windows decides the position */
               CW_USEDEFAULT,       /* where the window ends up on the screen */
               544,                 /* The programs width */
               375,                 /* and height in pixels */
               HWND_DESKTOP,        /* The window is a child-window to desktop */
               NULL,                /* No menu */
               hThisInstance,       /* Program Instance handler */
               NULL                 /* No Window Creation data */
               );
    
        /* Make the window visible on the screen */
        ShowWindow (hwnd, nCmdShow);
    
        /* Run the message loop. It will run until GetMessage() returns 0 */
        while (GetMessage (&messages, NULL, 0, 0))
        {
            /* Translate virtual-key messages into character messages */
            TranslateMessage(&messages);
            /* Send message to WindowProcedure */
            DispatchMessage(&messages);
        }
    
        /* The program return-value is 0 - The value that PostQuitMessage() gave */
        return messages.wParam;
    }
    
    
    /*  This function is called by the Windows function DispatchMessage()  */
    
    LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
    {
        switch (message)                  /* handle the messages */
        {
            case WM_DESTROY:
                PostQuitMessage (0);       /* send a WM_QUIT to the message queue */
                break;
            default:                      /* for messages that we don't deal with */
                return DefWindowProc (hwnd, message, wParam, lParam);
        }
    
        return 0;
    }

  2. #2
    Ngày gia nhập
    09 2006
    Bài viết
    711

    Cậu build ở mode ANSI rồi, code này cũng là code ANSI.
    Build và viết app lại ở mode full UNICODE, xem trong các setting của GCC lại thử xem.

  3. #3
    Ngày gia nhập
    11 2006
    Bài viết
    75

    Define đủ 2 đồng chí UNICODE và _UNICODE, dùng TCHAR thay vì char*, wrap text trong macro TEXT (or _TEXT or _T). Khi nào cần biên dịch ở chế độ ansi, undefine 2 thằng UNICODE và _UNICODE nói trên.

    Ngoài ra, cái thư viện STL của nó không support unicode đâu (lỗi implement library). Vì vậy, nếu bác cần dùng đến STL, bác phải thay cái GNU STL đó bằng một STL platform khác (vd: STLport).

    GCC có bug nhưng không phải trong trường hợp này :-).

    Lâu không động đến WinAPI rồi, bác check lại dùm hộ em.
    Our dreams are young and we both know they take us where we want to go...

  4. #4
    Ngày gia nhập
    01 2009
    Bài viết
    201

    Trích dẫn Nguyên bản được gửi bởi ilovecplusplus Xem bài viết
    Define đủ 2 đồng chí UNICODE và _UNICODE, dùng TCHAR thay vì char*, wrap text trong macro TEXT (or _TEXT or _T). Khi nào cần biên dịch ở chế độ ansi, undefine 2 thằng UNICODE và _UNICODE nói trên.

    Ngoài ra, cái thư viện STL của nó không support unicode đâu (lỗi implement library). Vì vậy, nếu bác cần dùng đến STL, bác phải thay cái GNU STL đó bằng một STL platform khác (vd: STLport).

    GCC có bug nhưng không phải trong trường hợp này :-).

    Lâu không động đến WinAPI rồi, bác check lại dùm hộ em.
    em không hiểu cái GNU STL và cái STL platform nghĩa là gì,anh có thể giải thích được không

  5. #5
    Ngày gia nhập
    01 2008
    Nơi ở
    Gameloft Studio
    Bài viết
    294

    CodeBlock nó chỉ là 1 hỗ trợ CODE thôi chứ thực chất quá trình biên dịch là ở GNU Compiler. Do đó cậu chỉ cần cấu hình unicode cho nó mà thôi.

    Tớ thì có cài codeblock đó nhưng mà nói thật chả khi nào xài. Tớ toàn code = visual studio cho lẹ rồi mới chuyển qua GNU Compiler biên dịch để được ứng dụng chạy hoàn toàn độc lập mà ko cần các Packet cài thêm của VS.

    Tớ có thể biên dịch tay như sau, cấu hình trên Codeblock thì cậu mò mò thử xem ở phần Compiler thử xem

    Code:
    # makefile.mak
    
    CC = g++
    PROG = myApplication.exe
    SOURCE		=   main.cpp
    
    RESOURCEOUT	= resource.o
    
    UNICODE		= -DUNICODE -D_UNICODE
    CFLAGS		= -DTIXML_USE_STL $(UNICODE)
    DFLAGS		= -Wl,--subsystem,windows
    LIBS		= -lcomdlg32 -lcomctl32 -lgdi32 -lole32 -loleacc -lshell32 -lshlwapi
    
    all: Compile
    
    Compile:
    $(CC) $(DFLAGS) $(CFLAGS)  $(SOURCE) $(RESOURCEOUT) -o $(PROG) $(LIBS)
    Dịch:
    Code:
    make -f makefile.mak

Các đề tài tương tự

  1. Lập trình C++ với CodeBlock 10.05
    Gửi bởi rox_rook trong diễn đàn Thủ thuật, Tutorials và Mã nguồn C/C++/C++0x
    Trả lời: 6
    Bài viết cuối: 19-10-2013, 01:25 AM
  2. Sự khác nhau giữa thư viện mingw-x-bootstrap và mingw-x-gcc ??
    Gửi bởi trần trân trong diễn đàn Thắc mắc lập trình shell Linux
    Trả lời: 1
    Bài viết cuối: 01-04-2011, 07:51 PM
  3. Xin các file thư viện của codeblock
    Gửi bởi jerry2708 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 4
    Bài viết cuối: 08-01-2011, 05:30 AM
  4. Lập trình C cơ bản trên CodeBlock 8.02
    Gửi bởi minhfu trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 11
    Bài viết cuối: 06-06-2010, 07:55 PM
  5. [gcc-mingw] ICU + Gcc/mingw/MSYS = Khó chịu
    Gửi bởi ilovecplusplus trong diễn đàn Thắc mắc lập trình Visual C++
    Trả lời: 0
    Bài viết cuối: 12-07-2007, 02:36 AM

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