ViewVC Help
View File | Revision Log | Show Annotations | Download File | View Changeset | Root Listing
root/proj/trunk/VTBFileUtil2/Chooser.cxx
(Generate patch)

Comparing trunk/VTBFileUtil2/Chooser.cxx (file contents):
Revision 265 by douglas, 2003-08-16T20:55:39-07:00 vs.
Revision 269 by douglas, 2003-08-19T01:19:24-07:00

# Line 2 | Line 2
2   //
3   // Douglas Thrift
4   //
5 < // $Id: Chooser.cxx,v 1.3 2003/08/17 03:55:39 douglas Exp $
5 > // $Id: Chooser.cxx,v 1.7 2003/08/19 08:19:24 douglas Exp $
6  
7   #include "Chooser.h"
8  
9 < INT_PTR CALLBACK smersh(HWND dialog, UINT msg, WPARAM w, LPARAM l);
9 > Chooser::Chooser()
10 > {
11 >        shortcut = false;
12 >        choice = none;
13 >        number = count++;
14 >        choosers.insert(pair<unsigned, Chooser*>(number, this));
15 > }
16  
17 < struct
17 > Chooser::~Chooser()
18   {
19 <        bool* shortcut;
14 <        Mode* choice;
19 >        choosers.erase(number);
20   }
16 cheese;
21  
22   Mode Chooser::choose(HWND parent)
23   {
24 <        cheese.shortcut = &shortcut;
25 <        cheese.choice = &choice;
22 <
23 <        DialogBox(gui.instance, MAKEINTRESOURCE(IDD_CHOICE), parent, smersh);
24 >        DialogBoxParam(gui.instance, MAKEINTRESOURCE(IDD_CHOICE), parent,
25 >                Chooser::window, number);
26  
27          desktop();
28  
29          return choice;
30   }
31  
32 + unsigned Chooser::count = 0;
33 + map<unsigned, Chooser*> Chooser::choosers;
34 + map<HWND, Chooser*> Chooser::windows;
35 +
36 + INT_PTR CALLBACK Chooser::window(HWND dialog, UINT msg, WPARAM w, LPARAM l)
37 + {
38 +        map<HWND, Chooser*>::iterator itor = windows.find(dialog);
39 +        Chooser* data = itor->second;
40 +
41 +        switch (msg)
42 +        {
43 +        case WM_INITDIALOG:
44 +                center(dialog);
45 +                SendMessage(dialog, WM_SETICON, ICON_BIG, LPARAM(gui.icon));
46 +                SendMessage(dialog, WM_SETTEXT, 0, LPARAM(programName.c_str()));
47 +                {
48 +                        map<unsigned, Chooser*>::iterator itor = choosers.find(l);
49 +                        
50 +                        windows.insert(pair<HWND, Chooser*>(dialog, itor->second));
51 +                }
52 +                break;
53 +        case WM_COMMAND:
54 +                switch (LOWORD(w))
55 +                {
56 +                case IDC_CHOICE_DISC:
57 +                        data->choice = disc;
58 +                        if (debug) cerr << "choice = disc\n";
59 +                        EnableWindow(GetDlgItem(dialog, IDC_CHOICE_ALWAYS), TRUE);
60 +                        EnableWindow(GetDlgItem(dialog, IDOK), TRUE);
61 +                        break;
62 +                case IDC_CHOICE_SCAN:
63 +                        data->choice = scan;
64 +                        if (debug) cerr << "choice = scan\n";
65 +                        EnableWindow(GetDlgItem(dialog, IDC_CHOICE_ALWAYS), TRUE);
66 +                        EnableWindow(GetDlgItem(dialog, IDOK), TRUE);
67 +                        break;
68 +                case IDC_CHOICE_ALWAYS:
69 +                        data->shortcut = !data->shortcut;
70 +                        if (debug) cerr << "shortcut = " << data->shortcut << "\n";
71 +                        break;
72 +                case IDCANCEL:
73 +                        data->choice = none;
74 +                case IDOK:
75 +                        EndDialog(dialog, w);
76 +                        return TRUE;
77 +                default:
78 +                        break;
79 +                }
80 +                break;
81 +        case WM_DESTROY:
82 +                windows.erase(dialog);
83 +                break;
84 +        }
85 +
86 +        return FALSE;
87 + }
88 +
89   void Chooser::desktop(void)
90   {
91          if (!shortcut || choice == none) return;
92  
93          IShellLink* link;
94  
36        CoInitialize(NULL);
95          CoCreateInstance(CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER,
96                  IID_IShellLink, (LPVOID*)(&link));
97  
# Line 72 | Line 130 | void Chooser::desktop(void)
130          file->Release();
131          link->Release();
132  
133 <        CoUninitialize();
76 < }
77 <
78 < INT_PTR CALLBACK smersh(HWND dialog, UINT msg, WPARAM w, LPARAM l)
79 < {
80 <        switch (msg)
81 <        {
82 <        case WM_INITDIALOG:
83 <                center(dialog);
84 <                SendMessage(dialog, WM_SETICON, ICON_BIG, LPARAM(gui.icon));
85 <                SendMessage(dialog, WM_SETTEXT, 0, LPARAM(programName.c_str()));
86 <                break;
87 <        case WM_COMMAND:
88 <                switch (LOWORD(w))
89 <                {
90 <                case IDC_CHOICE_DISC:
91 <                        *cheese.choice = disc;
92 <                        if (debug) cerr << "choice = disc\n";
93 <                        EnableWindow(GetDlgItem(dialog, IDC_CHOICE_ALWAYS), TRUE);
94 <                        EnableWindow(GetDlgItem(dialog, IDOK), TRUE);
95 <                        break;
96 <                case IDC_CHOICE_SCAN:
97 <                        *cheese.choice = scan;
98 <                        if (debug) cerr << "choice = scan\n";
99 <                        EnableWindow(GetDlgItem(dialog, IDC_CHOICE_ALWAYS), TRUE);
100 <                        EnableWindow(GetDlgItem(dialog, IDOK), TRUE);
101 <                        break;
102 <                case IDC_CHOICE_ALWAYS:
103 <                        *cheese.shortcut = !*cheese.shortcut;
104 <                        if (debug) cerr << "shortcut = " << *cheese.shortcut << "\n";
105 <                        break;
106 <                case IDCANCEL:
107 <                        *cheese.choice = none;
108 <                case IDOK:
109 <                        EndDialog(dialog, w);
110 <                        return TRUE;
111 <                default:
112 <                        break;
113 <                }
114 <                break;
115 <        }
116 <
117 <        return FALSE;
133 >        delete [] desktop;
134   }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines