Develop and Download Open Source Software

Browse CVS Repository

Contents of /enbanfukusyaya/EnbanKensa/win32/EnbanKensaDlg.cpp

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph


Revision 1.4 - (show annotations) (download) (as text)
Sat May 27 16:04:59 2006 UTC (17 years, 10 months ago) by bananajinn
Branch: MAIN
CVS Tags: HEAD
Changes since 1.3: +29 -3 lines
File MIME type: text/x-c++src
*** empty log message ***

1 // EnbanKensaDlg.cpp : インプリメンテーション ファイル
2 //
3
4 #include "stdafx.h"
5 #include "EnbanKensa.h"
6 #include "EnbanKensaDlg.h"
7 #include "ThemeSelectDlg.h"
8 #include "ThemeMessageDlg.h"
9 #include "SettingDlg.h"
10 #include <GraphicUtil.h>
11 #include "ui.h"
12 #include "check.h"
13
14 #ifdef _DEBUG
15 #define new DEBUG_NEW
16 #undef THIS_FILE
17 static char THIS_FILE[] = __FILE__;
18 #endif
19
20 #define THEME_DEFAULT 0
21 #define THEME_AQUA 1
22
23 /////////////////////////////////////////////////////////////////////////////
24 // アプリケーションのバージョン情報で使われている CAboutDlg ダイアログ
25
26 class CAboutDlg : public CThemeDialog
27 {
28 public:
29 CAboutDlg();
30
31 // ダイアログ データ
32 //{{AFX_DATA(CAboutDlg)
33 enum { IDD = IDD_ABOUTBOX };
34 CThemeButton m_BtnOK;
35 CThemeLabel m_StcVersion;
36 CThemeLabel m_StcCopyright;
37 //}}AFX_DATA
38
39 // ClassWizard は仮想関数のオーバーライドを生成します
40 //{{AFX_VIRTUAL(CAboutDlg)
41 protected:
42 virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV のサポート
43 //}}AFX_VIRTUAL
44
45 // インプリメンテーション
46 protected:
47 //{{AFX_MSG(CAboutDlg)
48 virtual BOOL OnInitDialog();
49 afx_msg void OnPaint();
50 //}}AFX_MSG
51 DECLARE_MESSAGE_MAP()
52 private:
53 CBitmap m_bmpLogo;
54 CBitmap m_bmpLogoMask;
55 void DrawAppLogo(CDC *pDC);
56 };
57
58 CAboutDlg::CAboutDlg() : CThemeDialog(CAboutDlg::IDD, NULL)
59 {
60 //{{AFX_DATA_INIT(CAboutDlg)
61 //}}AFX_DATA_INIT
62 m_bmpLogo.LoadBitmap(IDB_APPLOGO);
63 m_bmpLogoMask.LoadBitmap(IDB_APPLOGO_MASK);
64 }
65
66 void CAboutDlg::DoDataExchange(CDataExchange* pDX)
67 {
68 CDialog::DoDataExchange(pDX);
69 //{{AFX_DATA_MAP(CAboutDlg)
70 DDX_Control(pDX, IDOK, m_BtnOK);
71 DDX_Control(pDX, IDC_STC_VERSION, m_StcVersion);
72 DDX_Control(pDX, IDC_STC_COPYRIGHT, m_StcCopyright);
73 //}}AFX_DATA_MAP
74 }
75
76 BOOL CAboutDlg::OnInitDialog()
77 {
78 CDialog::OnInitDialog();
79
80 // TODO: この位置に初期化の補足処理を追加してください
81 m_BtnOK.SetTheme(GetTheme());
82 m_StcCopyright.SetTheme(GetTheme());
83 m_StcVersion.SetTheme(GetTheme());
84
85 return TRUE; // コントロールにフォーカスを設定しないとき、戻り値は TRUE となります
86 // 例外: OCX プロパティ ページの戻り値は FALSE となります
87 }
88
89
90 void CAboutDlg::OnPaint()
91 {
92 CPaintDC dc(this); // 描画用のデバイス コンテキスト
93
94 // TODO: この位置にメッセージ ハンドラ用のコードを追加してください
95 DrawAppLogo(&dc);
96 // 描画用メッセージとして CDialog::OnPaint() を呼び出してはいけません
97 }
98
99 void CAboutDlg::DrawAppLogo(CDC *pDC)
100 {
101 RECT rcLogo;
102 SIZE szLogo;
103 THEME_BITMAP tb;
104 CGraphicUtil GUtil;
105
106 tb.bitmap = &m_bmpLogo;
107 tb.mask = &m_bmpLogoMask;
108 tb.border_height = 0;
109 tb.border_height = 0;
110 tb.flags = TBF_TILE;
111
112 szLogo = GUtil.GetBitmapSize(&m_bmpLogo);
113
114 GetDlgItem(IDC_STC_LOGO)->GetWindowRect(&rcLogo);
115 ScreenToClient(&rcLogo);
116
117 rcLogo.right = rcLogo.left + szLogo.cx;
118 rcLogo.bottom = rcLogo.top + szLogo.cy;
119 GUtil.DrawThemeBitmap(this, pDC, &tb, &rcLogo);
120 }
121
122
123 BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
124 //{{AFX_MSG_MAP(CAboutDlg)
125 ON_WM_PAINT()
126 //}}AFX_MSG_MAP
127 END_MESSAGE_MAP()
128
129 /////////////////////////////////////////////////////////////////////////////
130 // CEnbanKensaDlg ダイアログ
131
132 CEnbanKensaDlg::CEnbanKensaDlg(CWnd* pParent /*=NULL*/)
133 : CThemeDialog(CEnbanKensaDlg::IDD, pParent)
134 {
135 //{{AFX_DATA_INIT(CEnbanKensaDlg)
136 // メモ: この位置に ClassWizard によってメンバの初期化が追加されます。
137 //}}AFX_DATA_INIT
138 // メモ: LoadIcon は Win32 の DestroyIcon のサブシーケンスを要求しません。
139 m_hIcon = AfxGetApp()->LoadIcon(IDI_APPICON);
140 m_nThemeNumber = THEME_DEFAULT;
141 m_bScanDone = FALSE;
142 m_pDrives = NULL;
143 m_bRunning = FALSE;
144 ::ZeroMemory(&m_Drawable, sizeof(m_Drawable));
145 m_bmpLogo.LoadBitmap(IDB_LOGO);
146 m_bmpLogoMask.LoadBitmap(IDB_LOGOMASK);
147 m_pDiscInfoDlg = NULL;
148 }
149
150 void CEnbanKensaDlg::DoDataExchange(CDataExchange* pDX)
151 {
152 CDialog::DoDataExchange(pDX);
153 //{{AFX_DATA_MAP(CEnbanKensaDlg)
154 DDX_Control(pDX, IDC_BTN_DISCINFO, m_BtnDiscInfo);
155 DDX_Control(pDX, IDC_STC_INFO, m_StcInfo);
156 DDX_Control(pDX, IDC_STC_DRAWAREA, m_StcDrawArea);
157 DDX_Control(pDX, IDOK, m_BtnOK);
158 DDX_Control(pDX, IDC_STC_DRIVE, m_StcDrive);
159 DDX_Control(pDX, IDC_CMB_DRIVE, m_CmbDrive);
160 //}}AFX_DATA_MAP
161 }
162
163 BEGIN_MESSAGE_MAP(CEnbanKensaDlg, CDialog)
164 //{{AFX_MSG_MAP(CEnbanKensaDlg)
165 ON_WM_SYSCOMMAND()
166 ON_WM_PAINT()
167 ON_WM_QUERYDRAGICON()
168 ON_BN_CLICKED(IDC_BTN_DISCINFO, OnBtnDiscinfo)
169 //}}AFX_MSG_MAP
170 ON_MESSAGE(WM_KICKIDLE, OnKickIdle)
171 ON_MESSAGE(WM_USER_UICTL, OnUICtl)
172 END_MESSAGE_MAP()
173
174 /////////////////////////////////////////////////////////////////////////////
175 // CEnbanKensaDlg メッセージ ハンドラ
176
177 BOOL CEnbanKensaDlg::OnInitDialog()
178 {
179 CDialog::OnInitDialog();
180
181 // "バージョン情報..." メニュー項目をシステム メニューへ追加します。
182
183 // IDM_ABOUTBOX はコマンド メニューの範囲でなければなりません。
184 ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
185 ASSERT(IDM_ABOUTBOX < 0xF000);
186
187 CMenu* pSysMenu = GetSystemMenu(FALSE);
188 if (pSysMenu != NULL){
189 CString strAboutMenu, strThemeSelect;
190 strAboutMenu.LoadString(IDS_ABOUTBOX);
191 strThemeSelect.LoadString(IDS_THEMESELECT);
192 if (!strAboutMenu.IsEmpty()){
193 pSysMenu->AppendMenu(MF_SEPARATOR);
194 pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
195 if(!strThemeSelect.IsEmpty()){
196 pSysMenu->AppendMenu(MF_STRING, IDM_THEMESELECT, strThemeSelect);
197 }
198 }
199 }
200
201 // このダイアログ用のアイコンを設定します。フレームワークはアプリケーションのメイン
202 // ウィンドウがダイアログでない時は自動的に設定しません。
203 SetIcon(m_hIcon, TRUE); // 大きいアイコンを設定
204 SetIcon(m_hIcon, FALSE); // 小さいアイコンを設定
205
206 // TODO: 特別な初期化を行う時はこの場所に追加してください。
207 LoadIniFile();
208 LoadTheme();
209 SetWindowText("円盤検査");
210 OpenAspi();
211 RECT rect;
212 m_StcDrawArea.GetClientRect(&rect);
213 CreateDrawable(rect.right-rect.left, rect.bottom-rect.top);
214 m_BtnOK.SetWindowText("読取検査");
215 m_BtnDiscInfo.SetWindowText("円盤情報");
216
217 return TRUE; // TRUE を返すとコントロールに設定したフォーカスは失われません。
218 }
219
220 void CEnbanKensaDlg::OnSysCommand(UINT nID, LPARAM lParam)
221 {
222 switch(nID & 0xFFF0){
223 case IDM_ABOUTBOX:
224 {
225 CAboutDlg dlgAbout;
226 dlgAbout.SetTheme(GetTheme());
227 dlgAbout.DoModal();
228 }
229 break;
230 case IDM_THEMESELECT:
231 {
232 CThemeSelectDlg dlgThemeSel;
233 CThemeSet *pThemeClass = ((CEnbanKensaApp *)AfxGetApp())->GetThemeClass();
234 dlgThemeSel.SetTheme(pThemeClass);
235 dlgThemeSel.SetThemeNumber(m_nThemeNumber);
236 if(dlgThemeSel.DoModal()==IDOK){
237 m_nThemeNumber = dlgThemeSel.GetThemeNumber();
238 LoadTheme();
239 RedrawWindow(NULL, NULL, RDW_INVALIDATE|RDW_FRAME);
240 Invalidate();
241 }
242 }
243 break;
244 default:
245 CDialog::OnSysCommand(nID, lParam);
246 }
247 }
248
249 // もしダイアログボックスに最小化ボタンを追加するならば、アイコンを描画する
250 // コードを以下に記述する必要があります。MFC アプリケーションは document/view
251 // モデルを使っているので、この処理はフレームワークにより自動的に処理されます。
252
253 void CEnbanKensaDlg::OnPaint()
254 {
255 if (IsIconic())
256 {
257 CPaintDC dc(this); // 描画用のデバイス コンテキスト
258
259 SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
260
261 // クライアントの矩形領域内の中央
262 int cxIcon = GetSystemMetrics(SM_CXICON);
263 int cyIcon = GetSystemMetrics(SM_CYICON);
264 CRect rect;
265 GetClientRect(&rect);
266 int x = (rect.Width() - cxIcon + 1) / 2;
267 int y = (rect.Height() - cyIcon + 1) / 2;
268
269 // アイコンを描画します。
270 dc.DrawIcon(x, y, m_hIcon);
271 }
272 else
273 {
274 CPaintDC dc(this);
275 DrawLogo(&dc);
276
277 CDialog::OnPaint();
278 }
279 }
280
281 // システムは、ユーザーが最小化ウィンドウをドラッグしている間、
282 // カーソルを表示するためにここを呼び出します。
283 HCURSOR CEnbanKensaDlg::OnQueryDragIcon()
284 {
285 return (HCURSOR) m_hIcon;
286 }
287
288 void CEnbanKensaDlg::OnOK()
289 {
290 // TODO: この位置にその他の検証用のコードを追加してください
291
292 //CDialog::OnOK();
293 if(m_bRunning){
294 UISetAbort();
295 m_BtnOK.EnableWindow(FALSE);
296 return;
297 }
298
299 DRIVEID drive;
300 int sel_drive;
301 int ret;
302
303 /* 選択ドライブ取得 */
304 sel_drive = m_CmbDrive.GetCurSel();
305 if(sel_drive == CB_ERR)
306 return;
307
308 if(m_pDiscInfoDlg != NULL){
309 m_pDiscInfoDlg->DestroyWindow();
310 delete m_pDiscInfoDlg;
311 m_pDiscInfoDlg = NULL;
312 }
313
314 drive.hid = m_pDrives[sel_drive].hid;
315 drive.tid = m_pDrives[sel_drive].tid;
316
317 UIClearAbort();
318 UISetHWND(this->m_hWnd);
319 m_BtnOK.SetWindowText("中断");
320 m_BtnOK.SetFocus();
321 m_CmbDrive.EnableWindow(FALSE);
322 m_BtnDiscInfo.EnableWindow(FALSE);
323 m_bRunning = TRUE;
324
325 ret = CheckDisc(&drive);
326
327 m_BtnOK.SetWindowText("読取検査");
328 m_BtnOK.EnableWindow(TRUE);
329 m_BtnDiscInfo.EnableWindow(TRUE);
330 m_CmbDrive.EnableWindow(TRUE);
331 m_bRunning = FALSE;
332 }
333
334 void CEnbanKensaDlg::LoadIniFile()
335 {
336 char buf[80];
337
338 GetRegString("theme", buf, sizeof(buf));
339 if(!strcmp(buf, "aqua")){
340 m_nThemeNumber = THEME_AQUA;
341 }
342 else{
343 m_nThemeNumber = THEME_DEFAULT;
344 }
345 }
346
347 void CEnbanKensaDlg::SaveIniFile()
348 {
349 char *type;
350
351 switch(m_nThemeNumber){
352 case THEME_AQUA:
353 type = "aqua";
354 break;
355 default:
356 type = "normal";
357 }
358 WriteRegString("theme", type);
359 }
360
361 void CEnbanKensaDlg::GetRegString(const char *key, char *string_ret, DWORD size)
362 {
363 LONG lRet;
364 HKEY hKey;
365 DWORD dwCount;
366 DWORD dwType;
367
368 if(size==0)
369 return;
370 if(string_ret==NULL)
371 return;
372 if(key==NULL)
373 return;
374
375 lRet = RegCreateKeyEx(HKEY_CURRENT_USER, "SOFTWARE\\EnbanKensa", 0, NULL,
376 REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hKey, NULL);
377 if(lRet!=ERROR_SUCCESS)
378 return;
379 dwCount = size;
380 dwType = REG_SZ;
381 lRet = RegQueryValueEx(hKey, key, NULL, &dwType, (unsigned char *)string_ret, &dwCount);
382 if(lRet!=ERROR_SUCCESS){
383 RegCloseKey(hKey);
384 return;
385 }
386 RegCloseKey(hKey);
387 string_ret[size-1]='\0';
388 }
389
390 void CEnbanKensaDlg::WriteRegString(const char *key, const char *string)
391 {
392 LONG lRet;
393 HKEY hKey;
394
395 if(key==NULL)
396 return;
397 if(string==NULL)
398 string="";
399 lRet = RegCreateKeyEx(HKEY_CURRENT_USER, "SOFTWARE\\EnbanKensa", 0, NULL,
400 REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hKey, NULL);
401 if(lRet!=ERROR_SUCCESS)
402 return;
403 lRet = RegSetValueEx(hKey, key, 0, REG_SZ, (const unsigned char *)string, strlen(string));
404 if(lRet!=ERROR_SUCCESS){
405 RegCloseKey(hKey);
406 return;
407 }
408 RegCloseKey(hKey);
409 }
410
411 void CEnbanKensaDlg::LoadTheme()
412 {
413 LOADABLE_THEME_BITMAP ltbButtonNormal = { IDB_BUTTON_NORMAL, 0, 2, 2, TBF_STRETCH };
414 LOADABLE_THEME_BITMAP ltbButtonFocus = { IDB_BUTTON_FOCUS, 0, 2, 2, TBF_STRETCH };
415 LOADABLE_THEME_BITMAP ltbButtonSelect = { IDB_BUTTON_SELECT, 0, 2, 2, TBF_STRETCH };
416 LOADABLE_THEME_BITMAP ltbButtonDisable = { IDB_BUTTON_DISABLE, 0, 2, 2, TBF_STRETCH };
417 LOADABLE_THEME_BITMAP ltbDropButton = { IDB_DROPDOWN, 0, 2, 2, TBF_STRETCH };
418 // LOADABLE_THEME_BITMAP ltbComboBoxBG = { IDB_COMBOBOX, 0, 2, 2, TBF_TILE };
419 // LOADABLE_THEME_BITMAP ltbChecked = { IDB_CHECKED, 0, 4, 4, TBF_STRETCH };
420 // LOADABLE_THEME_BITMAP ltbUnchecked = { IDB_UNCHECKED, 0, 4, 4, TBF_STRETCH };
421 // LOADABLE_THEME_BITMAP ltbProgressBG = { IDB_PROGRESSBG, 0, 16, 4, TBF_VSTRETCH };
422 // LOADABLE_THEME_BITMAP ltbProgressFG = { IDB_PROGRESSFG, 0, 12, 4, TBF_VSTRETCH };
423 LOADABLE_THEME_BITMAP ltbDialogBG = { IDB_DIALOGBG, 0, 16, 0, TBF_TILE };
424 LOADABLE_THEME_BITMAP ltbCloseButton = { IDB_CLOSEBUTTON, 0, 2, 2, TBF_STRETCH };
425 LOADABLE_THEME_BITMAP ltbMaxButton = { IDB_MAXBUTTON, 0, 2, 2, TBF_STRETCH };
426 LOADABLE_THEME_BITMAP ltbMinButton = { IDB_MINBUTTON, 0, 2, 2, TBF_STRETCH };
427 LOADABLE_THEME_BITMAP ltbTitleActive = { IDB_TITLE_ACT, 0, 16, 0, TBF_VSTRETCH };
428 LOADABLE_THEME_BITMAP ltbTitleInactive = { IDB_TITLE_INACT, 0, 16, 0, TBF_VSTRETCH };
429 LOADABLE_THEME theme_normal[] = {
430 { TCID_DEFAULT, TTID_FGCOLOR, TSID_NORMAL, THEME_DATA_COLOR(RGB(255,255,200)) },
431 { TCID_DEFAULT, TTID_FGCOLOR, TSID_FOCUSED, THEME_DATA_COLOR(RGB(250,250,235)) },
432 { TCID_DEFAULT, TTID_FGCOLOR, TSID_SELECTED, THEME_DATA_COLOR(RGB(235,238,230)) },
433 { TCID_DEFAULT, TTID_FGCOLOR, TSID_DISABLED, THEME_DATA_COLOR(RGB(192,192,192)) },
434 { TCID_BUTTON, TTID_BITMAP, TSID_NORMAL, THEME_DATA_BITMAP(&ltbButtonNormal) },
435 { TCID_BUTTON, TTID_BITMAP, TSID_FOCUSED, THEME_DATA_BITMAP(&ltbButtonFocus) },
436 { TCID_BUTTON, TTID_BITMAP, TSID_SELECTED, THEME_DATA_BITMAP(&ltbButtonSelect) },
437 { TCID_BUTTON, TTID_BITMAP, TSID_DISABLED, THEME_DATA_BITMAP(&ltbButtonDisable) },
438 // { TCID_CHECKBOX, TTID_CHECKED, TSID_NORMAL, THEME_DATA_BITMAP(&ltbChecked) },
439 // { TCID_CHECKBOX, TTID_UNCHECKED, TSID_NORMAL, THEME_DATA_BITMAP(&ltbUnchecked) },
440 // { TCID_COMBOBOX, TTID_BITMAP, TSID_NORMAL, THEME_DATA_BITMAP(&ltbComboBoxBG) },
441 { TCID_COMBOBOX, TTID_DROPBUTTON, TSID_NORMAL, THEME_DATA_BITMAP(&ltbDropButton) },
442 // { TCID_PROGRESSBAR, TTID_BITMAP, TSID_NORMAL, THEME_DATA_BITMAP(&ltbProgressBG) },
443 // { TCID_PROGRESSBAR, TTID_FGBITMAP, TSID_NORMAL, THEME_DATA_BITMAP(&ltbProgressFG) },
444 { TCID_DIALOG, TTID_BGBITMAP, TSID_NORMAL, THEME_DATA_BITMAP(&ltbDialogBG) },
445 { TCID_DIALOG, TTID_CLOSEBUTTON, TSID_NORMAL, THEME_DATA_BITMAP(&ltbCloseButton) },
446 { TCID_DIALOG, TTID_MAXBUTTON, TSID_NORMAL, THEME_DATA_BITMAP(&ltbMaxButton) },
447 { TCID_DIALOG, TTID_MINBUTTON, TSID_NORMAL, THEME_DATA_BITMAP(&ltbMinButton) },
448 { TCID_DIALOG, TTID_TITLEBITMAP, TSID_NORMAL, THEME_DATA_BITMAP(&ltbTitleActive) },
449 { TCID_DIALOG, TTID_TITLEBITMAP, TSID_DISABLED, THEME_DATA_BITMAP(&ltbTitleInactive) },
450 { TCID_END, 0, 0, NULL }
451 };
452 /* Aqua */
453 LOADABLE_THEME_BITMAP ltbAquaButton = { IDB_AQUA_BUTTON, IDB_AQUA_BUTTONMASK, 10, 2, TBF_STRETCH };
454 LOADABLE_THEME_BITMAP ltbAquaButtonFocus = { IDB_AQUA_BUTTONFOCUS, IDB_AQUA_BUTTONMASK, 10, 2, TBF_STRETCH };
455 LOADABLE_THEME_BITMAP ltbAquaCheck = { IDB_AQUA_CHECKED, IDB_AQUA_CHECKEDMASK, 0, 0, TBF_TILE };
456 LOADABLE_THEME_BITMAP ltbAquaUncheck = { IDB_AQUA_UNCHECKED, IDB_AQUA_UNCHECKEDMASK, 0, 0, TBF_TILE };
457 LOADABLE_THEME_BITMAP ltbAquaProgressBG = { IDB_AQUA_PROGRESSBG, 0, 0, 0, TBF_VSTRETCH };
458 LOADABLE_THEME_BITMAP ltbAquaProgressFG = { IDB_AQUA_PROGRESSFG, 0, 0, 0, TBF_VSTRETCH };
459 LOADABLE_THEME_BITMAP ltbAquaDropButton = { IDB_AQUA_DROPBUTTON, IDB_AQUA_DROPBUTTONMASK, 0, 0, TBF_STRETCH };
460 LOADABLE_THEME_BITMAP ltbAquaComboBoxBG = { IDB_AQUA_COMBOBOXBG, 0, 6, 2, TBF_VSTRETCH };
461 LOADABLE_THEME_BITMAP ltbAquaTitleActive = { IDB_AQUA_TITLEACT, 0, 0, 0, TBF_VSTRETCH };
462 LOADABLE_THEME_BITMAP ltbAquaTitleInactive = { IDB_AQUA_TITLEINACT, 0, 0, 0, TBF_VSTRETCH };
463 LOADABLE_THEME_BITMAP ltbAquaDialog = { IDB_AQUA_DIALOGBG, 0, 0, 0, TBF_TILE };
464 LOADABLE_THEME_BITMAP ltbAquaCloseButton = { IDB_AQUA_CLOSEBUTTON, IDB_AQUA_CLOSEBUTTONMASK, 0, 0, TBF_STRETCH };
465 LOADABLE_THEME_BITMAP ltbAquaMaxButton = { IDB_AQUA_MAXBUTTON, IDB_AQUA_CLOSEBUTTONMASK, 0, 0, TBF_STRETCH };
466 LOADABLE_THEME_BITMAP ltbAquaMinButton = { IDB_AQUA_MINBUTTON, IDB_AQUA_CLOSEBUTTONMASK, 0, 0, TBF_STRETCH };
467 LOADABLE_THEME theme_aqua[] = {
468 { TCID_DEFAULT, TTID_FGCOLOR, TSID_NORMAL, THEME_DATA_COLOR(RGB(0,0,0)) },
469 { TCID_DEFAULT, TTID_FGCOLOR, TSID_DISABLED, THEME_DATA_COLOR(RGB(128,128,128)) },
470 { TCID_BUTTON, TTID_BITMAP, TSID_NORMAL, THEME_DATA_BITMAP(&ltbAquaButton) },
471 { TCID_BUTTON, TTID_BITMAP, TSID_FOCUSED, THEME_DATA_BITMAP(&ltbAquaButtonFocus) },
472 { TCID_BUTTON, TTID_BITMAP, TSID_SELECTED, THEME_DATA_BITMAP(&ltbAquaButtonFocus) },
473 { TCID_CHECKBOX, TTID_CHECKED, TSID_NORMAL, THEME_DATA_BITMAP(&ltbAquaCheck) },
474 { TCID_CHECKBOX, TTID_UNCHECKED, TSID_NORMAL, THEME_DATA_BITMAP(&ltbAquaUncheck) },
475 { TCID_PROGRESSBAR, TTID_BITMAP, TSID_NORMAL, THEME_DATA_BITMAP(&ltbAquaProgressBG) },
476 { TCID_PROGRESSBAR, TTID_FGBITMAP, TSID_NORMAL, THEME_DATA_BITMAP(&ltbAquaProgressFG) },
477 { TCID_COMBOBOX, TTID_DROPBUTTON, TSID_NORMAL, THEME_DATA_BITMAP(&ltbAquaDropButton) },
478 { TCID_COMBOBOX, TTID_BITMAP, TSID_NORMAL, THEME_DATA_BITMAP(&ltbAquaComboBoxBG) },
479 { TCID_DIALOG, TTID_BGBITMAP, TSID_NORMAL, THEME_DATA_BITMAP(&ltbAquaDialog) },
480 { TCID_DIALOG, TTID_TITLEFGCOLOR, TSID_NORMAL, THEME_DATA_COLOR(RGB(0,0,0)) },
481 { TCID_DIALOG, TTID_TITLEBITMAP, TSID_NORMAL, THEME_DATA_BITMAP(&ltbAquaTitleActive) },
482 { TCID_DIALOG, TTID_TITLEBITMAP, TSID_DISABLED, THEME_DATA_BITMAP(&ltbAquaTitleInactive) },
483 { TCID_DIALOG, TTID_CLOSEBUTTON, TSID_NORMAL, THEME_DATA_BITMAP(&ltbAquaCloseButton) },
484 { TCID_DIALOG, TTID_MAXBUTTON, TSID_NORMAL, THEME_DATA_BITMAP(&ltbAquaMaxButton) },
485 { TCID_DIALOG, TTID_RESTOREBUTTON, TSID_NORMAL, THEME_DATA_BITMAP(&ltbAquaMaxButton) },
486 { TCID_DIALOG, TTID_MINBUTTON, TSID_NORMAL, THEME_DATA_BITMAP(&ltbAquaMinButton) },
487 { TCID_END, 0, 0, NULL }
488 };
489
490 CThemeSet *pThemeClass = ((CEnbanKensaApp *)AfxGetApp())->GetThemeClass();
491 LOADABLE_THEME *theme;
492
493 switch(m_nThemeNumber){
494 case THEME_AQUA:
495 theme = theme_aqua;
496 break;
497 default:
498 theme = theme_normal;
499 }
500
501 pThemeClass->InitializeTheme();
502 pThemeClass->LoadThemeFromStruct(theme);
503 m_BtnOK.SetTheme(pThemeClass);
504 m_BtnDiscInfo.SetTheme(pThemeClass);
505 m_StcDrive.SetTheme(pThemeClass);
506 m_CmbDrive.SetTheme(pThemeClass);
507 m_StcInfo.SetTheme(pThemeClass);
508 this->SetTheme(pThemeClass);
509 }
510
511 void CEnbanKensaDlg::OnCancel()
512 {
513 // TODO: この位置に特別な後処理を追加してください。
514 if(m_bRunning){
515 UISetAbort();
516 m_bRunning=FALSE;
517 m_BtnOK.EnableWindow(FALSE);
518 return;
519 }
520 SaveIniFile();
521 CDialog::OnCancel();
522 }
523
524 LRESULT CEnbanKensaDlg::OnKickIdle(WPARAM wParam, LPARAM lParam)
525 {
526 SCAN_t *drives;
527 CString csMessage;
528 CComboBox *cb = &m_CmbDrive;
529 int nDrive;
530
531 if(m_bScanDone)
532 return 0;
533
534 CThemeSet *pThemeClass = ((CEnbanKensaApp *)AfxGetApp())->GetThemeClass();
535 CThemeMessageDlg MsgDlg;
536 MsgDlg.SetTheme(pThemeClass);
537
538 if(cb->GetCount()==0){
539 drives = ScanDrive(FALSE);
540 if(drives==NULL){
541 csMessage.LoadString(IDS_DRIVENOTFOUND);
542 MsgDlg.Disp(csMessage, NULL, MB_ICONERROR);
543 return 0;
544 }
545 for(nDrive=0; strlen((LPCTSTR)drives[nDrive].inqdata)!=0; nDrive++){
546 cb->AddString((LPCTSTR)drives[nDrive].inqdata);
547 }
548 if(m_pDrives!=NULL)
549 free(m_pDrives);
550 m_pDrives = drives;
551 cb->SetCurSel(0);
552 }
553
554 m_bScanDone = TRUE;
555 return 0;
556 }
557
558
559 BOOL CEnbanKensaDlg::DestroyWindow()
560 {
561 // TODO: この位置に固有の処理を追加するか、または基本クラスを呼び出してください
562 CloseAspi();
563 if(m_pDrives != NULL){
564 free(m_pDrives);
565 m_pDrives = NULL;
566 }
567 if(m_pDiscInfoDlg != NULL){
568 m_pDiscInfoDlg->DestroyWindow();
569 delete m_pDiscInfoDlg;
570 m_pDiscInfoDlg = NULL;
571 }
572 DestroyDrawable();
573 return CDialog::DestroyWindow();
574 }
575
576 LRESULT CEnbanKensaDlg::OnUICtl(WPARAM wParam, LPARAM lParam)
577 {
578 LPCTSTR lpMessage;
579
580 switch(wParam){
581 case UICTL_DISPINFO:
582 if(lParam==NULL){
583 lpMessage = "";
584 }
585 else{
586 lpMessage = (LPCTSTR)lParam;
587 }
588 m_StcInfo.SetWindowText(lpMessage);
589 break;
590 case UICTL_DRAWLINE:
591 DrawLine((DRAWLINE_t *)lParam);
592 break;
593 case UICTL_DRAWBOX:
594 DrawBox((DRAWBOX_t *)lParam);
595 break;
596 case UICTL_DRAWTEXT:
597 DrawText((DRAWTEXT_t *)lParam);
598 break;
599 case UICTL_GETDRAWABLESIZE:
600 GetDrawableSize((DRAWABLESIZE_t *)lParam);
601 break;
602 case UICTL_SETTING:
603 return Setting((OPTIONS *)lParam);
604 case UICTL_DISCINFO:
605 DispDiscInfo((UIDISCINFO *)lParam);
606 break;
607 }
608
609 return 0;
610 }
611
612 void CEnbanKensaDlg::CreateDrawable(int width, int height)
613 {
614 DRAWBOX_t db;
615 CWindowDC dc(this);
616
617 DestroyDrawable();
618 m_Drawable.hDC = ::CreateCompatibleDC(dc.m_hDC);
619 m_Drawable.hBitmap = ::CreateCompatibleBitmap(dc.m_hDC, width, height);
620 m_Drawable.hBitmapOld = (HBITMAP)::SelectObject(m_Drawable.hDC, m_Drawable.hBitmap);
621 m_Drawable.width = width;
622 m_Drawable.height = height;
623 m_Drawable.hFont = CreateFont(16, 8, 0, 0, 400, FALSE, FALSE, FALSE, DEFAULT_CHARSET,
624 OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY,
625 FIXED_PITCH|FF_DONTCARE, "MS ゴシック");
626 m_Drawable.hFontOld = (HFONT)::SelectObject(m_Drawable.hDC, m_Drawable.hFont);
627 ::SetBkMode(m_Drawable.hDC, TRANSPARENT);
628 db.x0 = 0;
629 db.y0 = 0;
630 db.x1 = width-1;
631 db.y1 = height-1;
632 db.color = RGB(0,0,0);
633 db.fill = TRUE;
634 DrawBox(&db);
635 }
636
637
638 void CEnbanKensaDlg::DestroyDrawable()
639 {
640 if(m_Drawable.hDC != NULL){
641 if(m_Drawable.hBitmap != NULL){
642 ::SelectObject(m_Drawable.hDC, m_Drawable.hBitmapOld);
643 ::DeleteObject(m_Drawable.hBitmap);
644 m_Drawable.hBitmap = NULL;
645 }
646 if(m_Drawable.hFont != NULL){
647 ::SelectObject(m_Drawable.hDC, m_Drawable.hFontOld);
648 ::DeleteObject(m_Drawable.hFont);
649 m_Drawable.hFont = NULL;
650 }
651 ::DeleteDC(m_Drawable.hDC);
652 m_Drawable.hDC = NULL;
653 }
654 }
655
656
657 void CEnbanKensaDlg::DrawLine(DRAWLINE_t *param)
658 {
659 HPEN hPen, hPenOld;
660 hPen = ::CreatePen(PS_SOLID, 1, param->color);
661 hPenOld = (HPEN)::SelectObject(m_Drawable.hDC, hPen);
662
663 ::MoveToEx(m_Drawable.hDC, param->x0, param->y0, NULL);
664 ::LineTo(m_Drawable.hDC, param->x1, param->y1);
665 ::SetPixel(m_Drawable.hDC, param->x1, param->y1, param->color);
666
667 ::SelectObject(m_Drawable.hDC, hPenOld);
668 ::DeleteObject(hPen);
669
670 // m_StcDrawArea.Invalidate();
671 RECT rect;
672 if(param->x0 < param->x1){
673 rect.left = param->x0;
674 rect.right = param->x1;
675 }
676 else{
677 rect.left = param->x1;
678 rect.right = param->x0;
679 }
680 if(param->y0 < param->y1){
681 rect.top = param->y0;
682 rect.bottom = param->y1;
683 }
684 else{
685 rect.top = param->y1;
686 rect.bottom = param->y0;
687 }
688 rect.right++;
689 rect.bottom++;
690 ::InvalidateRect(m_StcDrawArea.m_hWnd, &rect, FALSE);
691 }
692
693 void CEnbanKensaDlg::DrawBox(DRAWBOX_t *param)
694 {
695 HBRUSH hBrush;
696 RECT rect;
697 hBrush = ::CreateSolidBrush(param->color);
698 if(param->x0 < param->x1){
699 rect.left = param->x0;
700 rect.right = param->x1;
701 }
702 else{
703 rect.left = param->x1;
704 rect.right = param->x0;
705 }
706 if(param->y0 < param->y1){
707 rect.top = param->y0;
708 rect.bottom = param->y1;
709 }
710 else{
711 rect.top = param->y1;
712 rect.bottom = param->y0;
713 }
714 rect.right++;
715 rect.bottom++;
716
717 ::FillRect(m_Drawable.hDC, &rect, hBrush);
718
719 ::DeleteObject(hBrush);
720
721 ::InvalidateRect(m_StcDrawArea.m_hWnd, &rect, FALSE);
722 }
723
724 void CEnbanKensaDlg::DrawText(DRAWTEXT_t *param)
725 {
726 RECT rect;
727 SIZE size;
728 ::SetTextColor(m_Drawable.hDC, param->color);
729 ::TextOut(m_Drawable.hDC, param->x0, param->y0, param->text, strlen(param->text));
730 ::GetTextExtentPoint32(m_Drawable.hDC, param->text, strlen(param->text), &size);
731 rect.left = param->x0;
732 rect.top = param->y0;
733 rect.right = rect.left+size.cx;
734 rect.bottom = rect.top+size.cy;
735 ::InvalidateRect(m_StcDrawArea.m_hWnd, &rect, FALSE);
736 }
737
738 void CEnbanKensaDlg::GetDrawableSize(DRAWABLESIZE_t *param)
739 {
740 param->width = m_Drawable.width;
741 param->height = m_Drawable.height;
742 }
743
744
745 void CEnbanKensaDlg::DrawLogo(CDC *pDC)
746 {
747 RECT rcLogo;
748 SIZE szLogo;
749 THEME_BITMAP tb;
750 CGraphicUtil GUtil;
751
752 tb.bitmap = &m_bmpLogo;
753 tb.mask = &m_bmpLogoMask;
754 tb.border_height = 0;
755 tb.border_height = 0;
756 tb.flags = TBF_TILE;
757
758 szLogo = GUtil.GetBitmapSize(&m_bmpLogo);
759
760 GetDlgItem(IDC_STC_TITLELOGO)->GetWindowRect(&rcLogo);
761 ScreenToClient(&rcLogo);
762
763 rcLogo.right = rcLogo.left + szLogo.cx;
764 rcLogo.bottom = rcLogo.top + szLogo.cy;
765 GUtil.DrawThemeBitmap(this, pDC, &tb, &rcLogo);
766 }
767
768 int CEnbanKensaDlg::Setting(OPTIONS *pOption)
769 {
770 CSettingDlg dlg;
771 int ret;
772
773 dlg.SetTheme(GetTheme());
774 dlg.SetData(pOption);
775 ret = dlg.DoModal();
776 return ret==IDOK ? RET_OK : RET_ABORT;
777 }
778
779
780 void CEnbanKensaDlg::DispDiscInfo(UIDISCINFO *pDiscInfo)
781 {
782 if(m_pDiscInfoDlg == NULL){
783 m_pDiscInfoDlg = new CDiscInfoDlg(&m_StcDrawArea);
784 m_pDiscInfoDlg->Create(IDD_DISCINFO, &m_StcDrawArea);
785 m_pDiscInfoDlg->SetTheme(GetTheme());
786 m_pDiscInfoDlg->ShowWindow(SW_SHOWNORMAL);
787 }
788 m_pDiscInfoDlg->SetData(pDiscInfo);
789 }
790
791
792 void CEnbanKensaDlg::OnBtnDiscinfo()
793 {
794 // TODO: この位置にコントロール通知ハンドラ用のコードを追加してください
795 if(m_bRunning){
796 UISetAbort();
797 m_BtnDiscInfo.EnableWindow(FALSE);
798 return;
799 }
800
801 DRIVEID drive;
802 int sel_drive;
803 // int ret;
804
805 /* 選択ドライブ取得 */
806 sel_drive = m_CmbDrive.GetCurSel();
807 if(sel_drive == CB_ERR)
808 return;
809
810 drive.hid = m_pDrives[sel_drive].hid;
811 drive.tid = m_pDrives[sel_drive].tid;
812
813 UIClearAbort();
814 UISetHWND(this->m_hWnd);
815 m_BtnDiscInfo.SetWindowText("中断");
816 m_BtnOK.EnableWindow(FALSE);
817 m_CmbDrive.EnableWindow(FALSE);
818 m_bRunning = TRUE;
819 UICheckAbort();
820
821 DisplayDiscInformation(&drive);
822
823 m_BtnDiscInfo.SetWindowText("円盤情報");
824 m_BtnDiscInfo.EnableWindow(TRUE);
825 m_BtnOK.EnableWindow(TRUE);
826 m_CmbDrive.EnableWindow(TRUE);
827 m_bRunning = FALSE;
828 }

Back to OSDN">Back to OSDN
ViewVC Help
Powered by ViewVC 1.1.26