]> Creatis software - cpMesh.git/blob - appli/InteractiveDeformableMeshSegmentation/main.cxx
First commit
[cpMesh.git] / appli / InteractiveDeformableMeshSegmentation / main.cxx
1 #include "MainWnd.h"
2 #include <QApplication>
3
4 // -------------------------------------------------------------------------
5 int main( int argc, char* argv[] )
6 {
7   QApplication a( argc, argv );
8   MainWnd w;
9   w.show( );
10
11   return( a.exec( ) );
12 }
13
14 // -------------------------------------------------------------------------
15 #ifdef _WIN32
16
17 #include <memory>
18 #include <vector>
19 #include <windows.h>
20 #include <shellapi.h>
21
22 /**
23  */
24 class Win32CommandLineConverter
25 {
26 private:
27   std::unique_ptr< char*[ ] > argv_;
28   std::vector< std::unique_ptr< char[ ] > > storage_;
29
30 public:
31   Win32CommandLineConverter( )
32     {
33       LPWSTR cmd_line = GetCommandLineW( );
34       int argc;
35       LPWSTR* w_argv = CommandLineToArgvW( cmd_line, &argc );
36       argv_ = std::unique_ptr< char*[ ] >( new char*[ argc ] );
37       storage_.reserve( argc );
38       for( int i = 0; i < argc; ++i )
39       {
40         storage_.push_back( ConvertWArg( w_argv[ i ] ) );
41         argv_[ i ] = storage_.back( ).get( );
42
43       } // rof
44       LocalFree( w_argv );
45     }
46   int argc( ) const
47     {
48       return( static_cast< int >(storage_.size( ) ) );
49     }
50   char** argv( ) const
51     {
52       return( argv_.get( ) );
53     }
54   static std::unique_ptr< char[ ] > ConvertWArg( LPWSTR w_arg )
55     {
56       int size = WideCharToMultiByte(
57         CP_UTF8, 0, w_arg, -1, nullptr, 0, nullptr, nullptr
58         );
59       std::unique_ptr< char[ ] > ret( new char[ size ] );
60       WideCharToMultiByte(
61         CP_UTF8, 0, w_arg, -1, ret.get( ), size, nullptr, nullptr
62         );
63       return( ret );
64     }
65 };
66
67 int CALLBACK WinMain(
68   HINSTANCE hInstance,
69   HINSTANCE hPrevInstance,
70   LPSTR lpCmdLine,
71   int nCmdShow
72   )
73 {
74   Win32CommandLineConverter cmd_line;
75   return( main( cmd_line.argc( ), cmd_line.argv( ) ) );
76 }
77
78 #endif
79
80 // eof - $RCSfile$