Bonjour,

J'ai repris un ancien projet Open Source devellopé en C++, créé par quelqu'un d'autre

J'arrive à le modifier avec Visual Studio 2015 Community Edition

Il s'agit du logiciel ShiftN, j'en avais parlé ici :
https://www.developpez.net/forums/d2...-jour-shift-n/

Le soucis c'est que dans l'IDE je n'ai que du code, je ne peux pas modifier l'interface graphique autrement que par le code

Malgrès cela, jusqu'à maintenant j'avais réussi à apporter pas mal de modifications intéressantes, notamment des fonctions d'édition supplémentaires à la souris.

J'ai apporté d'autres modifications, mais que suis bloqué par un problème tout bête...

Pour éviter les TMS avec la souris, ce sont des fonctions qui utilisent les touches du clavier.

En faisant du reverse ingéneering, j'arrive à ajouter ces commandes au clavier, mais ça fonctionne en DEBUG mais pas en RELEASE

Le soucis c'est que l'executable en version DEBUG est beaucoup plus lent

Voici les modifications apportées au code :

Fichier ShiftN.rc :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
IDR_MAINFRAME ACCELERATORS 
BEGIN
    "N",            ID_APP_ABOUT,           VIRTKEY, SHIFT, NOINVERT
    "C",            ID_CTRLC,               VIRTKEY, CONTROL, NOINVERT
    "V",            ID_CTRLV,               VIRTKEY, CONTROL, NOINVERT
    VK_DELETE,      ID_DELMH,               VIRTKEY, NOINVERT
    VK_F1,          ID_HELPMH,              VIRTKEY, NOINVERT
    VK_PRIOR,       ID_MHUP,                VIRTKEY, NOINVERT
    VK_NEXT,        ID_MHDOWN,              VIRTKEY, NOINVERT
 
	//2026 - Ajout des raccourcis clavier ---------------------------------------------------------------------------------------------------
 
	// Debug: OK - Release: Ne fonctionne pas
	VK_F5, ID_TOGGLE_OPTIM_AT_LOAD, VIRTKEY, NOINVERT
 
	// Debug: OK - Release: Ne fonctionne pas
	VK_F2, ID_SAVE_CROP, VIRTKEY, NOINVERT
 
	// Debug: OK  - Release: Ne fonctionne pas
	VK_F9, ID_SAVE_CROP, VIRTKEY, NOINVERT
 
	// Debug: OK  - Release: Ne fonctionne pas
	VK_F3, ID_SAVE_NO_CROP, VIRTKEY, NOINVERT
 
	// Debug: OK - Release: Ne fonctionne pas
	VK_F10, ID_SAVE_NO_CROP, VIRTKEY, NOINVERT
 
	// Debug: OK - Release: Ne fonctionne pas
	VK_F11, ID_ANWENDEN_KORREKTURANPASSEN, VIRTKEY, NOINVERT
 
	// Debug: OK - Release: Fonctionne mais affiche un point d'arrêt quand on lance le programme en version Release depuis le compilateur
	VK_F12, MH_Re, VIRTKEY, NOINVERT
	// --------------------------------------------------------------------------------------------------------------------------------------
 
END
Fichier ressurce.h :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
//{{NO_DEPENDENCIES}}
// Microsoft Visual C++ generated include file.
// Used by ShiftN.rc
//
#define IDD_ABOUTBOX                    100
#define IDB_SPLASH                      102
#define CG_IDD_MYDIALOGBAR              103
#define CG_ID_VIEW_MYDIALOGBAR          104
#define CG_IDD_PROGRESS                 105
#define CG_IDS_PROGRESS_CAPTION         106
#define IDR_MAINFRAME                   128
#define IDR_SHIFTNTYPE                  129
#define IDD_DIALOG1                     130
#define IDD_DIALOG2                     131
#define IDD_DIALOG3                     133
#define IDD_DIALOG4                     134
#define IDD_DIALOG5                     135
#define IDD_DIALOG6                     136
#define IDD_DIALOG7                     137
#define IDD_DIALOG8                     138
#define IDD_DIALOG9                     139
#define IDD_DIALOG10                    140
#define IDD_DIALOG11                    141
#define IDD_DIALOG12                    149
#define CG_IDD_MYDIALOGBAR_SAVE         150
#define IDD_DIALOG13                    151
#define IDC_CHECK1                      1000
#define IDC_CHECK2                      1001
#define IDC_CHECK3                      1002
#define IDC_CHECK4                      1003
#define CG_IDC_PROGDLG_PROGRESS         1003
#define IDC_CHECK5                      1004
#define IDC_CHECK6                      1005
#define IDC_EDIT1                       1006
#define IDC_CHECK7                      1006
#define IDC_EDIT2                       1007
#define IDC_CHECK8                      1007
#define IDC_PROGRESS1                   1007
#define IDC_EDIT3                       1008
#define IDC_RADIO1                      1008
#define IDC_EDIT4                       1009
#define IDC_RADIO2                      1009
#define IDC_EDIT5                       1010
#define IDC_BUTTON1                     1010
#define IDC_CHECK9                      1010
#define IDC_RADIO3                      1010
#define IDC_EDIT6                       1011
#define IDC_SLIDER1                     1011
#define IDC_RADIO4                      1011
#define IDC_EDIT7                       1012
#define IDC_SLIDER2                     1012
#define IDC_CHECK10                     1012
#define IDC_EDIT8                       1013
#define IDC_SLIDER3                     1013
#define IDC_CHECK11                     1013
#define IDC_EDIT9                       1014
#define IDC_SLIDER4                     1014
#define IDC_EDIT11                      1015
#define IDC_EDIT10                      1016
#define IDC_EDIT12                      1016
#define IDC_EDIT13                      1017
#define IDC_EDIT14                      1018
#define IDC_EDIT15                      1019
#define MH_SAVE                         32771
#define MH_LOAD                         32772
#define MH_PARAM                        32773
#define MH_Go                           32774
#define ID_STAPELVERARBEITUNG           32775
#define MH_Go2                          32775
#define MH_BATCH                        32776
#define MH_ORIG                         32777
#define MH_GRAU                         32778
#define MH_SCHWARZ                      32779
#define ID_DARSTELLUNG                  32780
#define MH_DARST                        32781
#define ID_START                        32785
#define ID_OPTIONS_LANGUAGE             32786
#define ID_ANWENDEN_KORREKTURANPASSEN   32787
#define ID_DATEI_SPEICHERNUNTER         32788
#define MH_Re                           32791
#define ID_GITTER                       32792
#define ID_SAVE_CLOSE                   32793
#define ID_FILE_SAVEANDEXIT             32794
#define ID_ACKNOW                       32795
#define ID_EINSTELLUNGEN_SCHALTFLCHESPEICHERN 32797
#define ID_CTRLC                        32798
#define ID_CTRLV                        32799
#define ID_HELPMH                       32800
#define ID_DELMH                        32805
#define ID_ACCELERATOR32809             32809
#define ID_MHUP                         32811
#define ID_MHDOWN                       32812
 
//2026 ----------------------------------------
#define ID_SAVE_CROP                    32801
#define ID_SAVE_NO_CROP                 32802
#define ID_TOGGLE_OPTIM_AT_LOAD         32803
//---------------------------------------------
 
 
// Next default values for new objects
// 
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_3D_CONTROLS                     1
#define _APS_NEXT_RESOURCE_VALUE        152
#define _APS_NEXT_COMMAND_VALUE         32814
#define _APS_NEXT_CONTROL_VALUE         1012
#define _APS_NEXT_SYMED_VALUE           107
#endif
#endif
Fichier ShiftNView.h :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
// ShiftNView.h : Schnittstelle der Klasse CShiftNView
//
/////////////////////////////////////////////////////////////////////////////
 
#undef FAR
 
#if !defined(AFX_SHIFTNVIEW_H__81C9C6D6_853F_4B8C_A993_E824F347600A__INCLUDED_)
#define AFX_SHIFTNVIEW_H__81C9C6D6_853F_4B8C_A993_E824F347600A__INCLUDED_
 
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
 
 
class CShiftNView : public CView
{
protected: // Nur aus Serialisierung erzeugen
	CShiftNView();
	DECLARE_DYNCREATE(CShiftNView)
 
// Attribute
public:
	CShiftNDoc* GetDocument();
 
// Operationen
public:
 
// Überladungen
	// Vom Klassenassistenten generierte Überladungen virtueller Funktionen
	//{{AFX_VIRTUAL(CShiftNView)
	public:
	virtual void OnDraw(CDC* pDC);  // überladen zum Zeichnen dieser Ansicht
	virtual BOOL PreCreateWindow(CREATESTRUCT& cs);
	virtual void OnFinalRelease();
	virtual DROPEFFECT OnDragEnter(COleDataObject* pDataObject, DWORD dwKeyState, CPoint point);
	virtual void OnDragLeave();
	virtual DROPEFFECT OnDragOver(COleDataObject* pDataObject, DWORD dwKeyState, CPoint point);
	virtual BOOL OnDrop(COleDataObject* pDataObject, DROPEFFECT dropEffect, CPoint point);
	protected:
	virtual BOOL OnScrollBy(CSize sizeScroll, BOOL bDoScroll = TRUE);
	virtual void OnActivateView(BOOL bActivate, CView* pActivateView, CView* pDeactiveView);
	//}}AFX_VIRTUAL
 
// Implementierung
public:
	virtual ~CShiftNView();
#ifdef _DEBUG
	virtual void AssertValid() const;
	virtual void Dump(CDumpContext& dc) const;
#endif
 
protected:
 
// Generierte Message-Map-Funktionen
protected:
	//{{AFX_MSG(CShiftNView)
	afx_msg void OnSave();
	afx_msg void OnSaveAs();
	afx_msg void OnSaveExit();
	afx_msg void OnLoad();
	afx_msg void OnParam();
	afx_msg void OnCtrlC();
	afx_msg void OnCtrlV();
	afx_msg void OnGo();
	afx_msg void OnGitter();
	afx_msg void Reoptimize();
	afx_msg void OnBatch();
	afx_msg void OnDarst();
	afx_msg void OnLang();
	afx_msg void OnDownMH();
	afx_msg void OnUpMH();
	afx_msg void OnSchaltfl();
	afx_msg void OnAnwendenKorrekturanpassen();
	afx_msg void OnGoB();
	afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
	afx_msg void OnDelMH();
	afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
	afx_msg void OnMButtonDown(UINT nFlags, CPoint point);
	afx_msg void OnMouseMove(UINT nFlags, CPoint point);
	afx_msg void OnRButtonDown(UINT nFlags, CPoint point);
	afx_msg void OnLButtonUp(UINT nFlags, CPoint point);
	afx_msg void OnMButtonUp(UINT nFlags, CPoint point);
	afx_msg void OnSize(UINT nType, int cx, int cy);
	afx_msg void OnSetFocus(CWnd* pOldWnd);
	afx_msg void OnKillFocus(CWnd* pNewWnd);
	afx_msg void OnUpdateGitter(CCmdUI* pCmdUI);
	afx_msg void OnRButtonUp(UINT nFlags, CPoint point);
 
	// 2026 ----------------------------------
	afx_msg void OnSaveCrop();
	afx_msg void OnSaveNoCrop();
	afx_msg void OnToogleOptimAtLoad();
	// ---------------------------------------
 
 
	//}}AFX_MSG
	DECLARE_MESSAGE_MAP()
};
 
#ifndef _DEBUG  // Testversion in ShiftNView.cpp
inline CShiftNDoc* CShiftNView::GetDocument()
   { return (CShiftNDoc*)m_pDocument; }
#endif
 
/////////////////////////////////////////////////////////////////////////////
 
//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ fügt unmittelbar vor der vorhergehenden Zeile zusätzliche Deklarationen ein.
 
#endif // !defined(AFX_SHIFTNVIEW_H__81C9C6D6_853F_4B8C_A993_E824F347600A__INCLUDED_)
Fichier ShiftNViewcpp:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
BEGIN_MESSAGE_MAP(CShiftNView, CView)
	//{{AFX_MSG_MAP(CShiftNView)
	ON_COMMAND(MH_SAVE, OnSave)
	ON_COMMAND(ID_DATEI_SPEICHERNUNTER, OnSaveAs)
	ON_COMMAND(ID_SAVE_CLOSE, OnSaveExit)
	ON_COMMAND(MH_LOAD, OnLoad)
	ON_COMMAND(MH_PARAM, OnParam)
	ON_COMMAND(ID_CTRLC, OnCtrlC)
	ON_COMMAND(ID_CTRLV, OnCtrlV)
	ON_COMMAND(MH_Go, OnGo)
	ON_COMMAND(ID_GITTER, OnGitter)
	ON_COMMAND(MH_Re, Reoptimize)
	ON_COMMAND(MH_BATCH, OnBatch)
	ON_COMMAND(ID_DELMH, OnDelMH)
	ON_COMMAND(MH_DARST, OnDarst)
	ON_COMMAND(ID_EINSTELLUNGEN_SCHALTFLCHESPEICHERN, OnSchaltfl)
	ON_COMMAND(ID_OPTIONS_LANGUAGE, OnLang)
	ON_COMMAND(ID_MHUP, OnUpMH)
	ON_COMMAND(ID_MHDOWN, OnDownMH)
	ON_COMMAND(ID_ANWENDEN_KORREKTURANPASSEN, OnAnwendenKorrekturanpassen)
	ON_WM_CREATE()
	ON_WM_LBUTTONDOWN()
	ON_WM_MBUTTONDOWN()
	ON_WM_MOUSEMOVE()
	ON_WM_RBUTTONDOWN()
	ON_WM_LBUTTONUP()
	ON_WM_MBUTTONUP()
	ON_WM_SIZE()
	ON_WM_SETFOCUS()
	ON_WM_KILLFOCUS()
	ON_UPDATE_COMMAND_UI(ID_GITTER, OnUpdateGitter)
	ON_WM_RBUTTONUP()
	//}}AFX_MSG_MAP
 
	//2026 -----------------------------------------------------
	ON_COMMAND(ID_SAVE_CROP, OnSaveCrop)
	ON_COMMAND(ID_SAVE_NO_CROP, OnSaveNoCrop)
	ON_COMMAND(ID_TOGGLE_OPTIM_AT_LOAD, OnToogleOptimAtLoad)
	//----------------------------------------------------------
 
END_MESSAGE_MAP()
 
...
 
 
//2026
void CShiftNView::OnToogleOptimAtLoad() {
	OptimAtLoad++;
	if (OptimAtLoad >2) {
		OptimAtLoad = 0;
	}
}
void CShiftNView::OnSaveCrop()
{
	int beschneiden_old;
	beschneiden_old = beschneiden;
	beschneiden = 1;
	OnSave();
	beschneiden = beschneiden_old;
}
void CShiftNView::OnSaveNoCrop()
{
	int beschneiden_old;
	beschneiden_old = beschneiden;
	beschneiden = 0;
	OnSave();
	beschneiden = beschneiden_old;
}
Vous pouvez télécharger le code complet ici :

https://drive.google.com/file/d/1ueo...ew?usp=sharing

Merci

A bientôt