forked from Thomas-Mielke-Software/EasyCash
-
Notifications
You must be signed in to change notification settings - Fork 0
/
DSAMessageBox.cpp
120 lines (106 loc) · 3.16 KB
/
DSAMessageBox.cpp
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
112
113
114
115
116
117
118
119
120
// DSAMessageBox.cpp: implementation file
//
// Diese Datei ist Bestandteil von EasyCash&Tax, der freien EÜR-Fibu
//
// Copyleft (GPLv3) 2020 Thomas Mielke
//
// Dies ist freie Software; Sie dürfen sie unter den Bedingungen der
// GNU General Public License, wie von der Free Software Foundation
// veröffentlicht, weiterverteilen und/oder modifizieren; entweder gemäß
// Version 3 der Lizenz oder (nach Ihrer Option) jeder späteren Version.
//
// Diese Software wird in der Hoffnung weiterverbreitet, dass sie nützlich
// sein wird, jedoch OHNE IRGENDEINE GARANTIE, auch ohne die implizierte
// Garantie der MARKTREIFE oder der VERWENDBARKEIT FÜR EINEN BESTIMMTEN ZWECK.
// Mehr Details finden Sie in der GNU Lesser General Public License.
//
// Sie sollten eine Kopie der GNU General Public License Version 3 zusammen mit
// dieser Software erhalten haben; falls nicht, schreiben Sie an die Free
// Software Foundation, Inc., 51 Franklin St, 5th Floor, Boston, MA 02110, USA.
#include "stdafx.h"
#include "nbMessageBox.h"
#include "DSAMessageBox.h"
// 'member' variables
static HINSTANCE m_hInst = NULL; // module name to get the ressource strings from
static char m_hkcu[200] = ""; // registry key to remember history for each ressource string ID
// --- Call these both to initialize DSAMessageBox
// set module to get ressource strings from (e.g. by using GetModuleHandle("MYAPP.EXE") )
void DSASetModule(HINSTANCE hInst)
{
m_hInst = hInst;
}
// set registry key to store checkbox history (e.g. "SOFTWARE\\MyCompany\\MyProduct")
void DSASetRegKey(char *s)
{
ASSERT(strlen(s) < sizeof(m_hkcu));
strcpy(m_hkcu, s);
}
//--- Main function
int DSAMessageBox(int nStringId, UINT nType)
{
int rc; // return value
HKEY hkcu; // registry key handle
char data[2]; // store data from registry here
CString csValueName; // value name in registry
csValueName.Format("DSA%05d", nStringId);
// look in user registry
if (RegCreateKey(HKEY_CURRENT_USER, m_hkcu, &hkcu) == ERROR_SUCCESS)
{
long lDummy;
long lType = REG_SZ;
long lCb;
lDummy = 0L;
// read settings for current user
*data = '\0';
lCb = sizeof(data);
if (RegQueryValueEx(hkcu, csValueName.GetBuffer(0),
NULL, (ULONG *)&lType,
(LPBYTE)data, (ULONG *)&lCb) != ERROR_SUCCESS)
{
*data = '0'; data[1] = '\0';
}
}
else
{
*data = '0'; data[1] = '\0';
hkcu = NULL;
}
// show message box
if (*data != '1')
{
char buf[10000];
CnbMessageBox box(AfxGetMainWnd());
LoadString(m_hInst, nStringId, buf, sizeof(buf));
rc = box.MessageBox(buf, nType);
if (hkcu)
{
if (box.GetChecked()) // 'Don't show again' checked?
{
long lRetCode;
*data = '1'; data[1] = '\0';
lRetCode = RegSetValueEx(hkcu, csValueName.GetBuffer(0), // remember in user registry
(ULONG)0, (ULONG)REG_SZ,
(LPBYTE)data, (ULONG)strlen(data));
}
}
}
else
{
switch (nType & 0xf)
{
case MB_YESNO:
case MB_YESNOCANCEL:
rc = IDYES; break;
case MB_ABORTRETRYIGNORE:
rc = IDIGNORE; break;
case MB_RETRYCANCEL:
rc = IDCANCEL; break;
default:
case MB_OK:
case MB_OKCANCEL:
rc = IDOK; break;
}
}
if (hkcu) RegCloseKey(hkcu);
return rc;
}