2016-10-11 46 views
0

我試圖編譯默認示例win32,Hello World項目。 我做了winegcc -m32 -o test2 test2.cpp。它運行正常,但資源沒有加載,有空的窗口標題和更多。什麼是正確的方式來使它也包含資源? 這裏又是項目代碼:用winegcc編譯Visual C++ 6項目

// test2.cpp : Defines the entry point for the application. 
    // 

    #include "stdafx.h" 
    #include "resource.h" 

    #define MAX_LOADSTRING 100 

    // Global Variables: 
    HINSTANCE hInst;        // current instance 
    TCHAR szTitle[MAX_LOADSTRING];        // The title bar text 
    TCHAR szWindowClass[MAX_LOADSTRING];        // The title bar text 

    // Foward declarations of functions included in this code module: 
    ATOM    MyRegisterClass(HINSTANCE hInstance); 
    BOOL    InitInstance(HINSTANCE, int); 
    LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); 
    LRESULT CALLBACK About(HWND, UINT, WPARAM, LPARAM); 

    int APIENTRY WinMain(HINSTANCE hInstance, 
         HINSTANCE hPrevInstance, 
         LPSTR  lpCmdLine, 
         int  nCmdShow) 
    { 
     // TODO: Place code here. 
     MSG msg; 
     HACCEL hAccelTable; 

     // Initialize global strings 
     LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING); 
     LoadString(hInstance, IDC_TEST2, szWindowClass, MAX_LOADSTRING); 
     MyRegisterClass(hInstance); 

     // Perform application initialization: 
     if (!InitInstance (hInstance, nCmdShow)) 
     { 
      return FALSE; 
     } 

     hAccelTable = LoadAccelerators(hInstance, (LPCTSTR)IDC_TEST2); 

     // Main message loop: 
     while (GetMessage(&msg, NULL, 0, 0)) 
     { 
      if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg)) 
      { 
       TranslateMessage(&msg); 
       DispatchMessage(&msg); 
      } 
     } 

     return msg.wParam; 
    } 



    // 
    // FUNCTION: MyRegisterClass() 
    // 
    // PURPOSE: Registers the window class. 
    // 
    // COMMENTS: 
    // 
    // This function and its usage is only necessary if you want this code 
    // to be compatible with Win32 systems prior to the 'RegisterClassEx' 
    // function that was added to Windows 95. It is important to call this function 
    // so that the application will get 'well formed' small icons associated 
    // with it. 
    // 
    ATOM MyRegisterClass(HINSTANCE hInstance) 
    { 
     WNDCLASSEX wcex; 

     wcex.cbSize = sizeof(WNDCLASSEX); 

     wcex.style   = CS_HREDRAW | CS_VREDRAW; 
     wcex.lpfnWndProc = (WNDPROC)WndProc; 
     wcex.cbClsExtra  = 0; 
     wcex.cbWndExtra  = 0; 
     wcex.hInstance  = hInstance; 
     wcex.hIcon   = LoadIcon(hInstance, (LPCTSTR)IDI_TEST2); 
     wcex.hCursor  = LoadCursor(NULL, IDC_ARROW); 
     wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1); 
     wcex.lpszMenuName = (LPCSTR)IDC_TEST2; 
     wcex.lpszClassName = szWindowClass; 
     wcex.hIconSm  = LoadIcon(wcex.hInstance, (LPCTSTR)IDI_SMALL); 

     return RegisterClassEx(&wcex); 
    } 

    // 
    // FUNCTION: InitInstance(HANDLE, int) 
    // 
    // PURPOSE: Saves instance handle and creates main window 
    // 
    // COMMENTS: 
    // 
    //  In this function, we save the instance handle in a global variable and 
    //  create and display the main program window. 
    // 
    BOOL InitInstance(HINSTANCE hInstance, int nCmdShow) 
    { 
     HWND hWnd; 

     hInst = hInstance; // Store instance handle in our global variable 

     hWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW, 
      CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL); 

     if (!hWnd) 
     { 
      return FALSE; 
     } 

     ShowWindow(hWnd, nCmdShow); 
     UpdateWindow(hWnd); 

     return TRUE; 
    } 

    // 
    // FUNCTION: WndProc(HWND, unsigned, WORD, LONG) 
    // 
    // PURPOSE: Processes messages for the main window. 
    // 
    // WM_COMMAND - process the application menu 
    // WM_PAINT - Paint the main window 
    // WM_DESTROY - post a quit message and return 
    // 
    // 
    LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) 
    { 
     int wmId, wmEvent; 
     PAINTSTRUCT ps; 
     HDC hdc; 
     TCHAR szHello[MAX_LOADSTRING]; 
     LoadString(hInst, IDS_HELLO, szHello, MAX_LOADSTRING); 

     switch (message) 
     { 
      case WM_COMMAND: 
       wmId = LOWORD(wParam); 
       wmEvent = HIWORD(wParam); 
       // Parse the menu selections: 
       switch (wmId) 
       { 
        case IDM_ABOUT: 
         DialogBox(hInst, (LPCTSTR)IDD_ABOUTBOX, hWnd, (DLGPROC)About); 
         break; 
        case IDM_EXIT: 
         DestroyWindow(hWnd); 
         break; 
        default: 
         return DefWindowProc(hWnd, message, wParam, lParam); 
       } 
       break; 
      case WM_PAINT: 
       hdc = BeginPaint(hWnd, &ps); 
       // TODO: Add any drawing code here... 
       RECT rt; 
       GetClientRect(hWnd, &rt); 
       DrawText(hdc, szHello, strlen(szHello), &rt, DT_CENTER); 
       EndPaint(hWnd, &ps); 
       break; 
      case WM_DESTROY: 
       PostQuitMessage(0); 
       break; 
      default: 
       return DefWindowProc(hWnd, message, wParam, lParam); 
     } 
     return 0; 
    } 

    // Mesage handler for about box. 
    LRESULT CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) 
    {H 
    switch (message) 
    { 
     case WM_INITDIALOG: 
       return TRUE; 

     case WM_COMMAND: 
      if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL) 
      { 
       EndDialog(hDlg, LOWORD(wParam)); 
       return TRUE; 
      } 
      break; 
    } 
    return FALSE; 
} 

回答

2

Winegcc能夠處理一個文件。轉換複雜項目使用Winemaker。它生成UNIX makefile。

靠近你的項目文件中運行以下命令:

winemaker --lower-uppercase --nomfc 
2

我不得不跑它這樣,從釀酒師的啓發:

wineg++ -c -I. -o test2.o test2.cpp 

wrc -I. -fotest2.res test2.rc 

wineg++ -m32 -mwindows -mno-cygwin -o test2.exe test2.o test2.res -lodbc32 -lole32 -loleaut32 -lwinspool -lodbccp32 
+0

Winlib提供了更便捷的方式來做到這一點。請檢查我的答案。 – Nikita