Unicode GUI уровня API Собственные приложения на C ++ для Windows / Linux / Mac - PullRequest
0 голосов
/ 20 октября 2010

Unicode GUI уровня API Собственные приложения на C ++ для Windows / Linux / Mac OS X.


Я ищу написание простого Unicode , GUI , Native , приложения, которое можно запускать без необходимости использования любой нестандартной библиотеки, написанной на C ++, скомпилированный с GNU-GCC (g ++).

НЕ

Я имею в виду не источник кода с одним источником кода, а источник кода 3 (Win / Linux / Mac)! запуск без библиотеки (собственное приложение).

* Собственное приложение

Приложение может запускаться без какой-либо нестандартной библиотеки, только во время выполнения операционной системы C ++ (например, MSVCRT в Windows).

* Unicode-приложение

Расположение окна справа налево (для поддержки языков чтения справа налево) с двумя кнопками [Message] для отображения строк UTF-8 ("اهلا بالعالم") в окне сообщения и [Exit] to. .. я думаю выход! : Р

===================================

Решение для Windows (Windows 7)

Компилятор: MinGW g ++ 4.5.0
Командная строка:

g++ -Wl,--enable-auto-import -O2 -fno-strict-aliasing -DWIN32_LEAN_AND_MEAN -D_UNICODE -DUNICODE -mwindows -Wall test.cpp -o test.exe
#include (windows.h)
#include (tchar.h)
#include (string)

typedef std::basic_string ustring;

LONG StandardExtendedStyle;

TCHAR buffer_1[1024];
TCHAR buffer_2[1024];

static HWND button_1;
static HWND button_2;

inline int ErrMsg(const ustring& s)
{
 return MessageBox(0,s.c_str(),_T("ERROR"),MB_OK|MB_ICONEXCLAMATION);
}

LRESULT CALLBACK WndProc(HWND hwnd,UINT uMsg,WPARAM wParam,LPARAM lParam)
{
switch (uMsg)
 {
 case WM_CREATE:

 button_1=CreateWindow(L"button",L"UTF-8 Message",WS_CHILD|WS_VISIBLE,10,10,120,25,hwnd,(HMENU)1,NULL,NULL);
 button_2=CreateWindow(L"button",L"Exit",WS_CHILD|WS_VISIBLE,10,50,120,25,hwnd,(HMENU)2,NULL,NULL);

 break;

 case WM_COMMAND:

  switch(LOWORD(wParam))
  {

    case 1:

    _stprintf(buffer_1,L"اهلا بالعالم");
    _stprintf(buffer_2,L"Hello World in Arabic !");
    MessageBoxW(hwnd,buffer_1,buffer_2,MB_ICONINFORMATION|MB_OK|MB_RTLREADING|MB_RIGHT);

    break;

    case 2:

    PostQuitMessage(0);

    break;

  }break;

  case WM_CLOSE:

  DestroyWindow(hwnd);

  break;

  case WM_DESTROY:

  PostQuitMessage(0);

  break;

  default:
   return DefWindowProc(hwnd,uMsg,wParam,lParam);
 }
  return 0;
}

int WINAPI WinMain(HINSTANCE hInst,HINSTANCE,LPSTR pStr,int nCmd)
{

 ustring classname=_T("window");
 WNDCLASSEX window={0};
 window.cbSize        = sizeof(WNDCLASSEX);
 window.lpfnWndProc   = WndProc;
 window.hInstance     = hInst;
 window.hIcon         = (HICON)LoadImage(GetModuleHandle(NULL), MAKEINTRESOURCE(100), IMAGE_ICON, 16, 16, 0);
 window.hCursor       = reinterpret_cast(LoadImage(0,IDC_ARROW,IMAGE_CURSOR,0,0,LR_SHARED));
 window.hbrBackground = reinterpret_cast(COLOR_BTNFACE+1);
 window.lpszClassName = classname.c_str(); 

 if (!RegisterClassEx(&window))
 {
   ErrMsg(_T("Failed to register wnd class"));return -1;
 }

 int desktopwidth=GetSystemMetrics(SM_CXSCREEN);
 int desktopheight=GetSystemMetrics(SM_CYSCREEN);

 HWND hwnd=CreateWindowEx(0,classname.c_str(),_T("The solution for Windows"),WS_OVERLAPPEDWINDOW,desktopwidth/4,desktopheight/4,270,150,0,0,
hInst,0);

 if (!hwnd)
 {
  ErrMsg(_T("Failed to create wnd"));
  return -1;
 }

 StandardExtendedStyle=GetWindowLong(hwnd,GWL_EXSTYLE);
 SetWindowLong(hwnd,GWL_EXSTYLE,StandardExtendedStyle|WS_EX_LAYOUTRTL);
 ShowWindow(hwnd,nCmd); 
 UpdateWindow(hwnd);
 MSG msg;
 while (GetMessage(&msg,0,0,0)>0)
 {
  TranslateMessage(&msg);
  DispatchMessage(&msg);
 }
 return static_cast(msg.wParam);
}


http://download.seifsoftware.com/the_solution_for_%20windows_in_c++.png
НЕ: Это приложение подключено только с MSVCRT.DLL, то есть это родное приложение Windows C ++.

===================================

Решение для Linux


ПОМОГИТЕ!


как запустить приложение в Linux без указания пользователю установить это и это .. нативное приложение Linux!

  • Какой формат файла наиболее подходит? Эльф, бин ..?
  • X11 - родная библиотека графического интерфейса Linux? или WxWidgets, QT, GTK +, gtkmm .. ??? !!!
  • Может быть запущен на Gnome и KDE? или нужен другой источник кода?

Кто-нибудь знает решение для Linux?

===================================



Решение для Mac OS X

ПОМОГИТЕ!


Я думаю, что решение для Mac OS X - это Какао в C ++ с G ++! но я точно уверен!

  • Может ли G ++ создать собственное приложение Mac OS с Cocoa ??

Ответы [ 3 ]

6 голосов
/ 20 октября 2010

Или Qt .Не "родной", но и не MFC, WPF, Silverlight ....

2 голосов
/ 20 октября 2010

X11 имеет NO встроенную библиотеку графического интерфейса.Изучите wxWidgets и используйте его на всех трех платформах.Он будет обрабатывать интерфейс для Win32 и Quartz для вас.

1 голос
/ 20 октября 2010

Windows API:

#undef  UNICODE
#define UNICODE
#include    <windows.h>

int main()
{
    MessageBox(
        0,
        L"اهلا بالعالم",
        L"Hello World in Arabic !",
        MB_ICONINFORMATION | MB_SETFOREGROUND
        );
}

Сборка с MinGW g ++ (производство a.exe):

C: \ test> g ++ --version | найти "++" g ++
(TDM-2 mingw32) 4.4.1

C: \ test> g ++ -O -pedantic -std = c ++ 98 -Wall -Wwrite-strings -Wno-long-long -mwindows x.cpp

C: \ test> _

Сборка с использованием Visual C ++ (создание x.exe):

C: \ test> (cl / nologo- 2> & 1) | найти "++"
Microsoft (R) 32-битный C / C ++ Оптимизация версии компилятора 16.00.30319.01 для 80x86

C: \ test> cl / nologo / EHsc / GR / Zc: forScope, wchar_t / W4 x.cpp / ссылка user32.lib / subsystem: windows / Запись: mainCRTStartup
x.cpp

C: \ test> _

Я думаю, что это довольно "завершено", но неясно, что означает "завершено".

В любом случае, чт.

...