Mogu to da uradim uz pomoc Internet Explorera, ali on ima problema kod stampanja....
Sodipodi je pisan uz pomoc Gtk+, pa ne znam kako da mu prosledim parametar (ovde bi to bilo ime fajle).
Probao sam direktno iz komandne linije, medjutim Sodipodi izgleda uopste ne uzima u obzir argumente koji mu se proslede, jer sta god da mu stavis kao argument on samo otvori glavni widget i nista vise (cak ni gresku ne prijavi).
Iz mog programa sam probao fje ShellExecute i CreateProcess, ali ni to ne pomaze.
Ima li neki iskusni Gtk+ programer da mi ponudi neko resenje?
Ako se neko pita zasto koristim bas Sodipodi, tri su glavna razloga:
- editor vektorske grafike, pa korisnik moze doda i nesto svoje na vec gotov crtez
- License: GNU General Public License (GPL), Public Domain (znaci moze se besplatno koristiti)
Sledi deo koda test aplikacije, koja bi trebala da pozove Sodipodi i ucita fajlu MojaSVG.SVG.
//Dlg_Test.cpp
#include <windows.h>
#include "dlg_test.h"
using namespace std;
char SvgFile[256], SodipodiPath[256], ExtProg[256];
BOOL CALLBACK DlgProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lParam)
{
switch(Message)
{
case WM_INITDIALOG:
strcpy(SvgFile,"D:\\CppRadni\\DLG_Test\\MojaSVG.SVG");
strcpy(SodipodiPath,"C:\\Program Files\\Sodipodi\\bin\\");
strcpy(ExtProg,SodipodiPath); strcat(ExtProg,"Sodipodi.exe");
break;
case WM_COMMAND:
switch(LOWORD(wParam))
{
case IDC_BUTT1:
{
ShellExecute(hwnd, "open", "IEXPLORE.EXE", SvgFile,NULL,SW_SHOWNORMAL);
// ovo radi kako treba
}
break;
case IDC_BUTT2:
{
SetCurrentDirectory(SodipodiPath); // da bi se glavni Widget pravilno iscrtao
ShellExecute(hwnd, NULL, ExtProg, NULL,NULL,SW_SHOWNORMAL);
//ovo samo startuje Sodipodi, bez obzira sta mu stavim za cetvrti argument
}
break;
case IDC_BUTT3:
SetCurrentDirectory(SodipodiPath); // da bi se glavni Widget pravilno iscrtao
{ // ovo parce je modifikovani kod sa MSDN:
// http://msdn.microsoft.com/libr...oc/base/creating_processes.asp
STARTUPINFO si;
PROCESS_INFORMATION pi;
ZeroMemory( &si, sizeof(si) );
si.cb = sizeof(si);
ZeroMemory( &pi, sizeof(pi) );
// Start the child process.
if( !CreateProcess(ExtProg, NULL, NULL, NULL, false, 0, NULL, NULL, &si, &pi ))
MessageBox(hwnd, "NESTO SAM POGRESIO", "PORUKA", MB_OK);
// Wait until child process exits.
//WaitForSingleObject( pi.hProcess, INFINITE );
// Close process and thread handles.
CloseHandle( pi.hProcess );
CloseHandle( pi.hThread );
//ovo samo startuje Sodipodi, bez obzira sta mu stavim za drugi argument
}
break;
}
break;
case WM_CLOSE:
EndDialog(hwnd, 0);
break;
default:
return false;
}
return true;
}
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow)
{
return DialogBox(hInstance, MAKEINTRESOURCE(IDD_MAIN), NULL, DlgProc);
}
Inace radim pod Windows2000 i sa Dev-Cpp 4.9.8.4 with Mingw/GCC 3.2