ReactOS 0.4.15-dev-5666-gc548b97
pane.cpp
Go to the documentation of this file.
1/*
2 * Copyright 2003, 2004, 2005 Martin Fuchs
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library; if not, write to the Free Software
16 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
17 */
18
19
20 //
21 // Explorer clone
22 //
23 // pane.cpp
24 //
25 // Martin Fuchs, 23.07.2003
26 //
27
28
29#include <precomp.h>
30
31enum IMAGE {
35};
36
37
38#define IMAGE_WIDTH 16
39#define IMAGE_HEIGHT 13
40
41
42static const TCHAR* g_pos_names[COLUMNS] = {
43 TEXT(""), /* symbol */
44 TEXT("Name"),
45 TEXT("Type"),
46 TEXT("Size"),
47 TEXT("CDate"),
48 TEXT("ADate"),
49 TEXT("MDate"),
50 TEXT("Index/Inode"),
51 TEXT("Links"),
52 TEXT("Attributes"),
53 TEXT("Security"),
54 TEXT("Content")
55};
56
57static const int g_pos_align[] = {
58 0,
59 HDF_LEFT, /* Name */
60 HDF_LEFT, /* Type */
61 HDF_RIGHT, /* Size */
62 HDF_LEFT, /* CDate */
63 HDF_LEFT, /* ADate */
64 HDF_LEFT, /* MDate */
65 HDF_LEFT, /* Index */
66 HDF_RIGHT, /* Links */
67 HDF_CENTER, /* Attributes */
68 HDF_LEFT, /* Security */
69 HDF_LEFT /* Content / Description */
70};
71
72
73Pane::Pane(HWND hparent, int id, int id_header, Entry* root, bool treePane, int visible_cols)
76 0, 0, 0, 0, hparent, (HMENU)id, g_Globals._hInstance, 0)),
77 _root(root),
78 _visible_cols(visible_cols),
79 _treePane(treePane)
80{
81 // insert entries into listbox
82 Entry* entry = _root;
83
84 if (entry)
86
87 init();
88
89 create_header(hparent, id_header);
90}
91
93{
95}
96
97
99{
100 switch(nmsg) {
101 case WM_HSCROLL:
102 set_header();
103 break;
104
105 case WM_SETFOCUS: {
107
108 child->set_focus_pane(this);
109 ListBox_SetSel(_hwnd, TRUE, 1);
110 /*@todo check menu items */
111 break;}
112
113 case WM_KEYDOWN: {
115
116 if (wparam == VK_TAB) {
117 /*@todo SetFocus(g_Globals.hdrivebar) */
118 child->switch_focus_pane();
119 }
120 break;}
121 }
122
123 return super::WndProc(nmsg, wparam, lparam);
124}
125
126
127bool Pane::create_header(HWND hparent, int id)
128{
129 HWND hwnd = CreateWindow(WC_HEADER, 0, WS_CHILD|WS_VISIBLE|HDS_HORZ/*@todo |HDS_BUTTONS + sort orders*/,
130 0, 0, 0, 0, hparent, (HMENU)id, g_Globals._hInstance, 0);
131 if (!hwnd)
132 return false;
133
135
136 HD_ITEM hdi;
137
138 hdi.mask = HDI_TEXT|HDI_WIDTH|HDI_FORMAT;
139
140 for(int idx=0; idx<COLUMNS; idx++) {
141 hdi.pszText = (TCHAR*)g_pos_names[idx];
142 hdi.fmt = HDF_STRING | g_pos_align[idx];
143 hdi.cxy = _widths[idx];
144 Header_InsertItem(hwnd, idx, &hdi);
145 }
146
148
149 return true;
150}
151
152
154{
156
158
159 // read the color for compressed files from registry
160 HKEY hkeyExplorer = 0;
161 DWORD len = sizeof(_clrCompressed);
162
163 if (RegOpenKey(HKEY_CURRENT_USER, TEXT("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer"), &hkeyExplorer) ||
164 RegQueryValueEx(hkeyExplorer, TEXT("AltColor"), 0, NULL, (LPBYTE)&_clrCompressed, &len) || len!=sizeof(_clrCompressed))
165 _clrCompressed = RGB(0,0,255);
166
167 if (hkeyExplorer)
168 RegCloseKey(hkeyExplorer);
169
170 // calculate column widths
171 _out_wrkr.init_output(_hwnd);
172 calc_widths(true);
173}
174
175
176 // calculate prefered width for all visible columns
177
178bool Pane::calc_widths(bool anyway)
179{
180 int col, x, cx, spc=3*_out_wrkr._spaceSize.cx;
181 int entries = ListBox_GetCount(_hwnd);
182 int orgWidths[COLUMNS];
183 int orgPositions[COLUMNS+1];
184 HFONT hfontOld;
185 HDC hdc;
186 int cnt;
187
188 if (!anyway) {
189 memcpy(orgWidths, _widths, sizeof(orgWidths));
190 memcpy(orgPositions, _positions, sizeof(orgPositions));
191 }
192
193 for(col=0; col<COLUMNS; col++)
194 _widths[col] = 0;
195
196 hdc = GetDC(_hwnd);
197 hfontOld = SelectFont(hdc, _out_wrkr._hfont);
198
199 for(cnt=0; cnt<entries; cnt++) {
200 Entry* entry = (Entry*) ListBox_GetItemData(_hwnd, cnt);
201
202 DRAWITEMSTRUCT dis;
203
204 dis.CtlType = 0;
205 dis.CtlID = 0;
206 dis.itemID = 0;
207 dis.itemAction = 0;
208 dis.itemState = 0;
209 dis.hwndItem = _hwnd;
210 dis.hDC = hdc;
211 dis.rcItem.left = 0;
212 dis.rcItem.top = 0;
213 dis.rcItem.right = 0;
214 dis.rcItem.bottom = 0;
215 /*dis.itemData = 0; */
216
217 draw_item(&dis, entry, COLUMNS);
218 }
219
220 SelectObject(hdc, hfontOld);
221 ReleaseDC(_hwnd, hdc);
222
223 x = 0;
224 for(col=0; col<COLUMNS; col++) {
225 _positions[col] = x;
226 cx = _widths[col];
227
228 if (cx) {
229 cx += spc;
230
231 if (cx < IMAGE_WIDTH)
232 cx = IMAGE_WIDTH;
233
234 _widths[col] = cx;
235 }
236
237 x += cx;
238 }
239
241
243
244 // no change?
245 if (!memcmp(orgWidths, _widths, sizeof(orgWidths)))
246 return FALSE;
247
248 // don't move, if only collapsing an entry
249 if (!anyway && _widths[0]<orgWidths[0] &&
250 !memcmp(orgWidths+1, _widths+1, sizeof(orgWidths)-sizeof(int))) {
251 _widths[0] = orgWidths[0];
252 memcpy(_positions, orgPositions, sizeof(orgPositions));
253
254 return FALSE;
255 }
256
257 InvalidateRect(_hwnd, 0, TRUE);
258
259 return TRUE;
260}
261
262
263static void format_date(const FILETIME* ft, TCHAR* buffer, int visible_cols)
264{
265 SYSTEMTIME systime;
266 FILETIME lft;
267 int len = 0;
268
269 *buffer = TEXT('\0');
270
271 if (!ft->dwLowDateTime && !ft->dwHighDateTime)
272 return;
273
274 if (!FileTimeToLocalFileTime(ft, &lft))
275 {err: lstrcpy(buffer,TEXT("???")); return;}
276
277 if (!FileTimeToSystemTime(&lft, &systime))
278 goto err;
279
280 if (visible_cols & COL_DATE) {
282 if (!len)
283 goto err;
284 }
285
286 if (visible_cols & COL_TIME) {
287 if (len)
288 buffer[len-1] = ' ';
289
290 buffer[len++] = ' ';
291
293 buffer[len] = TEXT('\0');
294 }
295}
296
297
298void Pane::draw_item(LPDRAWITEMSTRUCT dis, Entry* entry, int calcWidthCol)
299{
301 DWORD attrs;
302 int visible_cols = _visible_cols;
303 COLORREF bkcolor, textcolor;
304 RECT focusRect = dis->rcItem;
305 enum IMAGE img;
306 int img_pos, cx;
307 int col = 0;
308
309 if (entry) {
310 attrs = entry->_data.dwFileAttributes;
311
312 if (attrs & FILE_ATTRIBUTE_DIRECTORY) {
313 if (entry->_data.cFileName[0]==TEXT('.') && entry->_data.cFileName[1]==TEXT('.')
314 && entry->_data.cFileName[2]==TEXT('\0'))
316 else if (entry->_data.cFileName[0]==TEXT('.') && entry->_data.cFileName[1]==TEXT('\0'))
318 else if ((_treePane && (dis->itemState&ODS_FOCUS)))
320 else
321 img = IMG_FOLDER;
322 } else {
323 if (attrs & ATTRIBUTE_EXECUTABLE)
325 else if (entry->_type_name)
327 else
328 img = IMG_FILE;
329 }
330 } else {
331 attrs = 0;
332 img = IMG_NONE;
333 }
334
335 if (_treePane) {
336 if (entry) {
337 img_pos = dis->rcItem.left + entry->_level*(IMAGE_WIDTH+_out_wrkr._spaceSize.cx);
338
339 if (calcWidthCol == -1) {
340 int x;
341 int y = dis->rcItem.top + IMAGE_HEIGHT/2;
342 Entry* up;
343 RECT rt_clip;
344 HRGN hrgn_org = CreateRectRgn(0, 0, 0, 0);
345 HRGN hrgn;
346
347 rt_clip.left = dis->rcItem.left;
348 rt_clip.top = dis->rcItem.top;
349 rt_clip.right = dis->rcItem.left+_widths[col];
350 rt_clip.bottom = dis->rcItem.bottom;
351
352 hrgn = CreateRectRgnIndirect(&rt_clip);
353
354 if (!GetClipRgn(dis->hDC, hrgn_org)) {
355 DeleteObject(hrgn_org);
356 hrgn_org = 0;
357 }
358
359 //HGDIOBJ holdPen = SelectObject(dis->hDC, GetStockObject(BLACK_PEN));
362
363 if ((up=entry->_up) != NULL) {
364 MoveToEx(dis->hDC, img_pos-IMAGE_WIDTH/2, y, 0);
365 LineTo(dis->hDC, img_pos-2, y);
366
367 x = img_pos - IMAGE_WIDTH/2;
368
369 do {
371
372 if (up->_next) {
373#ifndef _LEFT_FILES
374 bool following_child = (up->_next->_data.dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY)!=0; // a directory?
375
376 if (!following_child)
377 {
378 for(Entry*n=up->_next; n; n=n->_next)
379 if (n->_down) { // any file with NTFS sub-streams?
380 following_child = true;
381 break;
382 }
383 }
384 if (following_child)
385#endif
386 {
387 MoveToEx(dis->hDC, x, dis->rcItem.top, 0);
388 LineTo(dis->hDC, x, dis->rcItem.bottom);
389 }
390 }
391 } while((up=up->_up) != NULL);
392 }
393
394 x = img_pos - IMAGE_WIDTH/2;
395
396 MoveToEx(dis->hDC, x, dis->rcItem.top, 0);
397 LineTo(dis->hDC, x, y);
398
399 if (entry->_next) {
400#ifndef _LEFT_FILES
401 bool following_child = (entry->_next->_data.dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY)!=0; // a directory?
402
403 if (!following_child)
404 {
405 for(Entry*n=entry->_next; n; n=n->_next)
406 if (n->_down) { // any file with NTFS sub-streams?
407 following_child = true;
408 break;
409 }
410 }
411 if (following_child)
412#endif
413 LineTo(dis->hDC, x, dis->rcItem.bottom);
414 }
415
416 if (entry->_down && entry->_expanded) {
418 MoveToEx(dis->hDC, x, dis->rcItem.top+IMAGE_HEIGHT, 0);
419 LineTo(dis->hDC, x, dis->rcItem.bottom);
420 }
421
422 SelectClipRgn(dis->hDC, hrgn_org);
423 if (hrgn_org) DeleteObject(hrgn_org);
424 //SelectObject(dis->hDC, holdPen);
425 } else if (calcWidthCol==col || calcWidthCol==COLUMNS) {
426 int right = img_pos + IMAGE_WIDTH - _out_wrkr._spaceSize.cx;
427
428 if (right > _widths[col])
429 _widths[col] = right;
430 }
431 } else {
432 img_pos = dis->rcItem.left;
433 }
434 } else {
435 img_pos = dis->rcItem.left;
436
437 if (calcWidthCol==col || calcWidthCol==COLUMNS)
438 _widths[col] = IMAGE_WIDTH;
439 }
440
441 if (calcWidthCol == -1) {
442 focusRect.left = img_pos -2;
443
444 if (attrs & FILE_ATTRIBUTE_COMPRESSED)
445 textcolor = _clrCompressed;
446 else
447 textcolor = RGB(0,0,0);
448
449 if (dis->itemState & ODS_FOCUS) {
450 textcolor = GetSysColor(COLOR_HIGHLIGHTTEXT);
451 bkcolor = GetSysColor(COLOR_HIGHLIGHT);
452 } else {
453 bkcolor = GetSysColor(COLOR_WINDOW);
454 }
455
456 HBRUSH hbrush = CreateSolidBrush(bkcolor);
457 FillRect(dis->hDC, &focusRect, hbrush);
459
461 SetTextColor(dis->hDC, textcolor);
462
463 cx = _widths[col];
464
465 if (cx && img!=IMG_NONE) {
466 if (cx > IMAGE_WIDTH)
467 cx = IMAGE_WIDTH;
468
469 if (entry->_icon_id > ICID_NONE)
470 g_Globals._icon_cache.get_icon(entry->_icon_id).draw(dis->hDC, img_pos, dis->rcItem.top, cx, GetSystemMetrics(SM_CYSMICON), bkcolor, 0);
471 else
473 img_pos, dis->rcItem.top, cx,
475 }
476 }
477
478 if (!entry)
479 return;
480
481 ++col;
482
483 // output file name
484 if (calcWidthCol == -1)
485 _out_wrkr.output_text(dis, _positions, col, entry->_display_name, 0);
486 else if (calcWidthCol==col || calcWidthCol==COLUMNS)
487 calc_width(dis, col, entry->_display_name);
488 ++col;
489
490 // output type/class name
491 if (visible_cols & COL_TYPE) {
492 if (calcWidthCol == -1)
493 _out_wrkr.output_text(dis, _positions, col, entry->_type_name? entry->_type_name: TEXT(""), 0);
494 else if (calcWidthCol==col || calcWidthCol==COLUMNS)
495 calc_width(dis, col, entry->_type_name? entry->_type_name: TEXT(""));
496 }
497 ++col;
498
499 // display file size
500 if (visible_cols & COL_SIZE) {
501 ULONGLONG size = ((ULONGLONG)entry->_data.nFileSizeHigh << 32) | entry->_data.nFileSizeLow;
502
504
505 if (calcWidthCol == -1)
507 else if (calcWidthCol==col || calcWidthCol==COLUMNS)
508 calc_width(dis, col, buffer);
509 }
510 ++col;
511
512 // display file date
513 if (visible_cols & (COL_DATE|COL_TIME)) {
514 format_date(&entry->_data.ftCreationTime, buffer, visible_cols);
515 if (calcWidthCol == -1)
516 _out_wrkr.output_text(dis, _positions, col, buffer, 0);
517 else if (calcWidthCol==col || calcWidthCol==COLUMNS)
518 calc_width(dis, col, buffer);
519 ++col;
520
521 format_date(&entry->_data.ftLastAccessTime, buffer, visible_cols);
522 if (calcWidthCol == -1)
524 else if (calcWidthCol==col || calcWidthCol==COLUMNS)
525 calc_width(dis, col, buffer);
526 ++col;
527
528 format_date(&entry->_data.ftLastWriteTime, buffer, visible_cols);
529 if (calcWidthCol == -1)
530 _out_wrkr.output_text(dis, _positions, col, buffer, 0);
531 else if (calcWidthCol==col || calcWidthCol==COLUMNS)
532 calc_width(dis, col, buffer);
533 ++col;
534 } else
535 col += 3;
536
537 if (entry->_bhfi_valid) {
538 ULONGLONG index = ((ULONGLONG)entry->_bhfi.nFileIndexHigh << 32) | entry->_bhfi.nFileIndexLow;
539
540 if (visible_cols & COL_INDEX) {
542
543 if (calcWidthCol == -1)
545 else if (calcWidthCol==col || calcWidthCol==COLUMNS)
546 calc_width(dis, col, buffer);
547
548 ++col;
549 }
550
551 if (visible_cols & COL_LINKS) {
552 wsprintf(buffer, TEXT("%d"), entry->_bhfi.nNumberOfLinks);
553
554 if (calcWidthCol == -1)
556 else if (calcWidthCol==col || calcWidthCol==COLUMNS)
557 calc_width(dis, col, buffer);
558
559 ++col;
560 }
561 } else
562 col += 2;
563
564 // show file attributes
565 if (visible_cols & COL_ATTRIBUTES) {
566 lstrcpy(buffer, TEXT(" \t \t \t \t \t \t \t \t \t \t \t \t \t \t "));
567
568 if (attrs & FILE_ATTRIBUTE_NORMAL) buffer[ 0] = 'N';
569 else {
570 if (attrs & FILE_ATTRIBUTE_READONLY) buffer[ 2] = 'R';
571 if (attrs & FILE_ATTRIBUTE_HIDDEN) buffer[ 4] = 'H';
572 if (attrs & FILE_ATTRIBUTE_SYSTEM) buffer[ 6] = 'S';
573 if (attrs & FILE_ATTRIBUTE_ARCHIVE) buffer[ 8] = 'A';
574 if (attrs & FILE_ATTRIBUTE_COMPRESSED) buffer[10] = 'C';
575 if (attrs & FILE_ATTRIBUTE_DIRECTORY) buffer[12] = 'D';
576 if (attrs & FILE_ATTRIBUTE_ENCRYPTED) buffer[14] = 'E';
577 if (attrs & FILE_ATTRIBUTE_TEMPORARY) buffer[16] = 'T';
578 if (attrs & FILE_ATTRIBUTE_SPARSE_FILE) buffer[18] = 'P';
579 if (attrs & FILE_ATTRIBUTE_REPARSE_POINT) buffer[20] = 'Q';
580 if (attrs & FILE_ATTRIBUTE_OFFLINE) buffer[22] = 'O';
581 if (attrs & FILE_ATTRIBUTE_NOT_CONTENT_INDEXED) buffer[24] = 'X';
582 if (attrs & ATTRIBUTE_EXECUTABLE) buffer[26] = 'x';
583 if (attrs & ATTRIBUTE_SYMBOLIC_LINK) buffer[28] = 'L';
584 }
585
586 if (calcWidthCol == -1)
588 else if (calcWidthCol==col || calcWidthCol==COLUMNS)
589 calc_tabbed_width(dis, col, buffer);
590 }
591 ++col;
592
593/*TODO
594 if (flags.security) {
595 DWORD rights = get_access_mask();
596
597 tcscpy(buffer, TEXT(" \t \t \t \t \t \t \t \t \t \t \t "));
598
599 if (rights & FILE_READ_DATA) buffer[ 0] = 'R';
600 if (rights & FILE_WRITE_DATA) buffer[ 2] = 'W';
601 if (rights & FILE_APPEND_DATA) buffer[ 4] = 'A';
602 if (rights & FILE_READ_EA) {buffer[6] = 'entry'; buffer[ 7] = 'R';}
603 if (rights & FILE_WRITE_EA) {buffer[9] = 'entry'; buffer[10] = 'W';}
604 if (rights & FILE_EXECUTE) buffer[12] = 'X';
605 if (rights & FILE_DELETE_CHILD) buffer[14] = 'D';
606 if (rights & FILE_READ_ATTRIBUTES) {buffer[16] = 'a'; buffer[17] = 'R';}
607 if (rights & FILE_WRITE_ATTRIBUTES) {buffer[19] = 'a'; buffer[20] = 'W';}
608 if (rights & WRITE_DAC) buffer[22] = 'C';
609 if (rights & WRITE_OWNER) buffer[24] = 'O';
610 if (rights & SYNCHRONIZE) buffer[26] = 'S';
611
612 output_text(dis, col++, buffer, DT_LEFT, 3, psize);
613 }
614
615 if (flags.description) {
616 get_description(buffer);
617 output_text(dis, col++, buffer, 0, psize);
618 }
619*/
620 ++col;
621
622 // output content / symbolic link target / comment
623 if (visible_cols & COL_CONTENT) {
624 if (calcWidthCol == -1)
625 _out_wrkr.output_text(dis, _positions, col, entry->_content? entry->_content: TEXT(""), 0);
626 else if (calcWidthCol==col || calcWidthCol==COLUMNS)
627 calc_width(dis, col, entry->_content? entry->_content: TEXT(""));
628 }
629}
630
631
633{
634 RECT rt = {0, 0, 0, 0};
635
637
638 if (rt.right > _widths[col])
639 _widths[col] = rt.right;
640}
641
643{
644 RECT rt = {0, 0, 0, 0};
645
646/* DRAWTEXTPARAMS dtp = {sizeof(DRAWTEXTPARAMS), 2};
647 DrawTextEx(dis->hDC, (LPTSTR)str, -1, &rt, DT_CALCRECT|DT_SINGLELINE|DT_NOPREFIX|DT_EXPANDTABS|DT_TABSTOP, &dtp);*/
648
650
651 if (rt.right > _widths[col])
652 _widths[col] = rt.right;
653}
654
655
656 // insert listbox entries after index idx
657
659{
660 Entry* entry = dir;
661
662 if (!entry)
663 return idx;
664
665 for(; entry; entry=entry->_next) {
666#ifndef _LEFT_FILES
667 if (_treePane &&
668 !(entry->_data.dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY) && // not a directory?
669 !entry->_down) // not a file with NTFS sub-streams?
670 continue;
671#endif
672
673 // don't display entries "." and ".." in the left pane
674 if (_treePane && (entry->_data.dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY)
675 && entry->_data.cFileName[0]==TEXT('.'))
676 if (entry->_data.cFileName[1]==TEXT('\0') ||
677 (entry->_data.cFileName[1]==TEXT('.') && entry->_data.cFileName[2]==TEXT('\0')))
678 continue;
679
680 if (idx != -1)
681 ++idx;
682
684
685 if (_treePane && entry->_expanded)
686 idx = insert_entries(entry->_down, idx);
687 }
688
689 return idx;
690}
691
692
694{
696 int scroll_pos = GetScrollPos(_hwnd, SB_HORZ);
697 int i=0, x=0;
698
699 item.mask = HDI_WIDTH;
700 item.cxy = 0;
701
702 for(; i<COLUMNS; i++) {
703 if (x + _widths[i] >= scroll_pos)
704 break;
705
706 x += _widths[i];
708 }
709
710 if (i < COLUMNS) {
711 x += _widths[i];
712 item.cxy = x - scroll_pos;
714
715 for(; i<COLUMNS; i++) {
716 item.cxy = _widths[i];
717 x += _widths[i];
719 }
720 }
721}
722
723
724 // calculate one prefered column width
725
727{
728 HFONT hfontOld;
729 int x, cx;
730 int cnt;
731 HDC hdc;
732
733 int entries = ListBox_GetCount(_hwnd);
734
735 _widths[col] = 0;
736
737 hdc = GetDC(_hwnd);
738 hfontOld = SelectFont(hdc, _out_wrkr._hfont);
739
740 for(cnt=0; cnt<entries; cnt++) {
741 Entry* entry = (Entry*) ListBox_GetItemData(_hwnd, cnt);
742
743 DRAWITEMSTRUCT dis;
744
745 dis.CtlType = 0;
746 dis.CtlID = 0;
747 dis.itemID = 0;
748 dis.itemAction = 0;
749 dis.itemState = 0;
750 dis.hwndItem = _hwnd;
751 dis.hDC = hdc;
752 dis.rcItem.left = 0;
753 dis.rcItem.top = 0;
754 dis.rcItem.right = 0;
755 dis.rcItem.bottom = 0;
756 /*dis.itemData = 0; */
757
758 draw_item(&dis, entry, col);
759 }
760
761 SelectObject(hdc, hfontOld);
762 ReleaseDC(_hwnd, hdc);
763
764 cx = _widths[col];
765
766 if (cx) {
768
769 if (cx < IMAGE_WIDTH)
770 cx = IMAGE_WIDTH;
771 }
772
773 _widths[col] = cx;
774
775 x = _positions[col] + cx;
776
777 for(; col<COLUMNS; col++) {
778 _positions[col+1] = x;
779 x += _widths[col];
780 }
781
783}
784
785
786int Pane::Notify(int id, NMHDR* pnmh)
787{
788 switch(pnmh->code) {
789 case HDN_TRACK:
790 case HDN_ENDTRACK: {
791 HD_NOTIFY* phdn = (HD_NOTIFY*) pnmh;
792 int idx = phdn->iItem;
793 int dx = phdn->pitem->cxy - _widths[idx];
794 int i;
795
796 ClientRect clnt(_hwnd);
797
798 // move immediate to simulate HDS_FULLDRAG (for now [04/2000] not realy needed with WINELIB)
799 Header_SetItem(_hwndHeader, idx, phdn->pitem);
800
801 _widths[idx] += dx;
802
803 for(i=idx; ++i<=COLUMNS; )
804 _positions[i] += dx;
805
806 {
807 int scroll_pos = GetScrollPos(_hwnd, SB_HORZ);
808 RECT rt_scr;
809 RECT rt_clip;
810
811 rt_scr.left = _positions[idx+1]-scroll_pos;
812 rt_scr.top = 0;
813 rt_scr.right = clnt.right;
814 rt_scr.bottom = clnt.bottom;
815
816 rt_clip.left = _positions[idx]-scroll_pos;
817 rt_clip.top = 0;
818 rt_clip.right = clnt.right;
819 rt_clip.bottom = clnt.bottom;
820
821 if (rt_scr.left < 0) rt_scr.left = 0;
822 if (rt_clip.left < 0) rt_clip.left = 0;
823
824 ScrollWindowEx(_hwnd, dx, 0, &rt_scr, &rt_clip, 0, 0, SW_INVALIDATE);
825
826 rt_clip.right = _positions[idx+1];
827 RedrawWindow(_hwnd, &rt_clip, 0, RDW_INVALIDATE|RDW_UPDATENOW);
828
829 if (pnmh->code == HDN_ENDTRACK) {
831
832 if (GetScrollPos(_hwnd, SB_HORZ) != scroll_pos)
833 set_header();
834 }
835 }
836
837 return 0;
838 }
839
840 case HDN_DIVIDERDBLCLICK: {
841 HD_NOTIFY* phdn = (HD_NOTIFY*) pnmh;
843
844 calc_single_width(phdn->iItem);
845 item.mask = HDI_WIDTH;
846 item.cxy = _widths[phdn->iItem];
847
848 Header_SetItem(_hwndHeader, phdn->iItem, &item);
849 InvalidateRect(_hwnd, 0, TRUE);
850 break;}
851
852 default:
853 return super::Notify(id, pnmh);
854 }
855
856 return 0;
857}
858
859
861{
862 _hfont = CreateFont(-MulDiv(8,GetDeviceCaps(WindowCanvas(0),LOGPIXELSY),72), 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, TEXT("MS Sans Serif"));
863}
864
866{
867 TCHAR b[16];
868
869 WindowCanvas canvas(hwnd);
870
871 if (GetNumberFormat(LOCALE_USER_DEFAULT, 0, TEXT("1000"), 0, b, 16) > 4)
872 _num_sep = b[1];
873 else
874 _num_sep = TEXT('.');
875
876 FontSelection font(canvas, _hfont);
877 GetTextExtentPoint32(canvas, TEXT(" "), 1, &_spaceSize);
878}
879
880
882{
883 int x = dis->rcItem.left;
884 RECT rt;
885
886 rt.left = x+positions[col]+_spaceSize.cx;
887 rt.top = dis->rcItem.top;
888 rt.right = x+positions[col+1]-_spaceSize.cx;
889 rt.bottom = dis->rcItem.bottom;
890
892}
893
895{
896 int x = dis->rcItem.left;
897 RECT rt;
898
899 rt.left = x+positions[col]+_spaceSize.cx;
900 rt.top = dis->rcItem.top;
901 rt.right = x+positions[col+1]-_spaceSize.cx;
902 rt.bottom = dis->rcItem.bottom;
903
904/* DRAWTEXTPARAMS dtp = {sizeof(DRAWTEXTPARAMS), 2};
905 DrawTextEx(dis->hDC, (LPTSTR)str, -1, &rt, DT_SINGLELINE|DT_NOPREFIX|DT_EXPANDTABS|DT_TABSTOP, &dtp);*/
906
908}
909
910void OutputWorker::output_number(LPDRAWITEMSTRUCT dis, int* positions, int col, LPCTSTR str)
911{
912 int x = dis->rcItem.left;
913 RECT rt;
914 LPCTSTR s = str;
915 TCHAR b[128];
916 LPTSTR d = b;
917 int pos;
918
919 rt.left = x+positions[col]+_spaceSize.cx;
920 rt.top = dis->rcItem.top;
921 rt.right = x+positions[col+1]-_spaceSize.cx;
922 rt.bottom = dis->rcItem.bottom;
923
924 if (*s)
925 *d++ = *s++;
926
927 // insert number separator characters
928 pos = lstrlen(s) % 3;
929
930 while(*s)
931 if (pos--)
932 *d++ = *s++;
933 else {
934 *d++ = _num_sep;
935 pos = 3;
936 }
937
939}
940
941
943{
944 switch(cmd) {
945 case ID_VIEW_NAME:
946 if (_visible_cols) {
947 _visible_cols = 0;
948 calc_widths(true);
949 set_header();
950 InvalidateRect(_hwnd, 0, TRUE);
951 MenuInfo* menu_info = Frame_GetMenuInfo(GetParent(_hwnd));
952 if (menu_info) {
956 }
957 }
958 break;
959
961 if (_visible_cols != COL_ALL) {
963 calc_widths(true);
964 set_header();
965 InvalidateRect(_hwnd, 0, TRUE);
966 MenuInfo* menu_info = Frame_GetMenuInfo(GetParent(_hwnd));
967 if (menu_info) {
971 }
972 }
973 break;
974
975 case ID_PREFERED_SIZES: {
976 calc_widths(true);
977 set_header();
978 InvalidateRect(_hwnd, 0, TRUE);
979 break;}
980
981 /*@todo more command ids... */
982
983 default:
984 return FALSE;
985 }
986
987 return TRUE;
988}
989
991{
992 HWND owner = GetParent(_hwnd);
993
994 return (MainFrameBase*)owner;
995}
static HRGN hrgn
static HBRUSH hbrush
int memcmp(void *Buffer1, void *Buffer2, ACPI_SIZE Count)
Definition: utclib.c:112
unsigned int dir
Definition: maze.c:112
#define RegCloseKey(hKey)
Definition: registry.h:47
#define NULL
Definition: types.h:112
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
unsigned int idx
Definition: utils.c:41
BOOL WINAPI ImageList_Destroy(HIMAGELIST himl)
Definition: imagelist.c:928
BOOL WINAPI ImageList_DrawEx(HIMAGELIST himl, INT i, HDC hdc, INT x, INT y, INT dx, INT dy, COLORREF rgbBk, COLORREF rgbFg, UINT fStyle)
Definition: imagelist.c:1264
#define FILE_ATTRIBUTE_NORMAL
Definition: compat.h:137
BOOL WINAPI FileTimeToSystemTime(IN CONST FILETIME *lpFileTime, OUT LPSYSTEMTIME lpSystemTime)
Definition: time.c:188
BOOL WINAPI FileTimeToLocalFileTime(IN CONST FILETIME *lpFileTime, OUT LPFILETIME lpLocalFileTime)
Definition: time.c:221
#define RGB(r, g, b)
Definition: precomp.h:62
#define ATTRIBUTE_SYMBOLIC_LINK
Definition: entries.h:62
#define ATTRIBUTE_EXECUTABLE
Definition: entries.h:63
#define PM_GET_FILEWND_PTR
Definition: explorer.h:61
unsigned int BOOL
Definition: ntddk_ex.h:94
unsigned long DWORD
Definition: ntddk_ex.h:95
pKey DeleteObject()
GLint GLvoid * img
Definition: gl.h:1956
GLint GLint GLint GLint GLint x
Definition: gl.h:1548
GLdouble s
Definition: gl.h:2039
GLint GLint GLint GLint GLint GLint y
Definition: gl.h:1548
GLsizeiptr size
Definition: glext.h:5919
GLdouble n
Definition: glext.h:7729
GLuint buffer
Definition: glext.h:5915
GLuint index
Definition: glext.h:6031
GLdouble GLdouble right
Definition: glext.h:10859
GLboolean GLboolean GLboolean b
Definition: glext.h:6204
GLbitfield flags
Definition: glext.h:7161
GLenum GLsizei len
Definition: glext.h:6722
GLuint id
Definition: glext.h:5910
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
#define up(mutex)
Definition: glue.h:30
uint32_t entry
Definition: isohybrid.c:63
#define TEXT(s)
Definition: k32.h:26
#define d
Definition: ke_i.h:81
#define b
Definition: ke_i.h:79
GLint dx
Definition: linetemp.h:97
#define memcpy(s1, s2, n)
Definition: mkisofs.h:878
ExplorerGlobals g_Globals
Definition: explorer.cpp:52
@ ICID_NONE
Definition: globals.h:64
#define IDB_IMAGES
Definition: resource.h:64
#define ID_VIEW_NAME
Definition: resource.h:132
#define ID_VIEW_SELECTED_ATTRIBUTES
Definition: resource.h:134
#define ID_PREFERED_SIZES
Definition: resource.h:194
#define ID_VIEW_ALL_ATTRIBUTES
Definition: resource.h:133
#define LONGLONGARG
Definition: utility.h:108
#define BUFFER_LEN
Definition: utility.h:97
#define _stprintf
Definition: utility.h:124
#define Frame_GetMenuInfo(hwnd)
Definition: window.h:282
HDC hdc
Definition: main.c:9
static UINT WPARAM wparam
Definition: combo.c:716
static UINT WPARAM LPARAM lparam
Definition: combo.c:716
static HDC
Definition: imagelist.c:92
static DWORD *static HFONT(WINAPI *pCreateFontIndirectExA)(const ENUMLOGFONTEXDVA *)
static const CLSID *static CLSID *static const GUID VARIANT VARIANT *static IServiceProvider DWORD *static HMENU
Definition: ordinal.c:60
static HWND child
Definition: cursoricon.c:298
static ATOM item
Definition: dde.c:856
INT WINAPI MulDiv(INT nNumber, INT nNumerator, INT nDenominator)
Definition: muldiv.c:25
Definition: mk_font.cpp:20
unsigned int UINT
Definition: ndis.h:50
#define FILE_ATTRIBUTE_READONLY
Definition: nt_native.h:702
#define FILE_ATTRIBUTE_COMPRESSED
Definition: nt_native.h:711
#define FILE_ATTRIBUTE_HIDDEN
Definition: nt_native.h:703
#define FILE_ATTRIBUTE_SYSTEM
Definition: nt_native.h:704
#define FILE_ATTRIBUTE_OFFLINE
Definition: nt_native.h:712
#define FILE_ATTRIBUTE_ARCHIVE
Definition: nt_native.h:706
#define FILE_ATTRIBUTE_DIRECTORY
Definition: nt_native.h:705
#define FILE_ATTRIBUTE_TEMPORARY
Definition: nt_native.h:708
#define LOCALE_USER_DEFAULT
#define FILE_ATTRIBUTE_ENCRYPTED
Definition: ntifs_ex.h:385
#define FILE_ATTRIBUTE_SPARSE_FILE
Definition: ntifs_ex.h:380
#define FILE_ATTRIBUTE_REPARSE_POINT
Definition: ntifs_ex.h:381
#define FILE_ATTRIBUTE_NOT_CONTENT_INDEXED
Definition: ntifs_ex.h:384
#define IMAGE_HEIGHT
Definition: pane.cpp:39
static const int g_pos_align[]
Definition: pane.cpp:57
static void format_date(const FILETIME *ft, TCHAR *buffer, int visible_cols)
Definition: pane.cpp:263
static const TCHAR * g_pos_names[COLUMNS]
Definition: pane.cpp:42
IMAGE
Definition: pane.cpp:31
@ IMG_NONE
Definition: pane.cpp:32
@ IMG_EXECUTABLE
Definition: pane.cpp:32
@ IMG_OPEN_FOLDER
Definition: pane.cpp:33
@ IMG_OPEN_PLUS
Definition: pane.cpp:33
@ IMG_DOCUMENT
Definition: pane.cpp:32
@ IMG_FOLDER
Definition: pane.cpp:33
@ IMG_FILE
Definition: pane.cpp:32
@ IMG_FOLDER_PLUS
Definition: pane.cpp:33
@ IMG_FOLDER_CUR
Definition: pane.cpp:34
@ IMG_OPEN_MINUS
Definition: pane.cpp:33
@ IMG_FOLDER_UP
Definition: pane.cpp:34
#define IMAGE_WIDTH
Definition: pane.cpp:38
#define COLUMNS
Definition: pane.h:73
@ COL_DATE
Definition: pane.h:38
@ COL_ALL
Definition: pane.h:45
@ COL_CONTENT
Definition: pane.h:44
@ COL_LINKS
Definition: pane.h:43
@ COL_ATTRIBUTES
Definition: pane.h:40
@ COL_INDEX
Definition: pane.h:42
@ COL_TIME
Definition: pane.h:39
@ COL_TYPE
Definition: pane.h:36
@ COL_SIZE
Definition: pane.h:37
#define WS_CHILD
Definition: pedump.c:617
#define LBS_DISABLENOSCROLL
Definition: pedump.c:690
#define LBS_OWNERDRAWFIXED
Definition: pedump.c:682
#define WS_VSCROLL
Definition: pedump.c:627
#define WS_VISIBLE
Definition: pedump.c:620
#define WS_HSCROLL
Definition: pedump.c:628
#define LBS_NOINTEGRALHEIGHT
Definition: pedump.c:686
#define LBS_NOTIFY
Definition: pedump.c:678
#define HD_ITEM
Definition: commctrl.h:664
#define HDF_LEFT
Definition: commctrl.h:713
#define WC_HEADER
Definition: commctrl.h:626
#define ILD_NORMAL
Definition: commctrl.h:417
#define HDN_ENDTRACK
Definition: commctrl.h:872
#define HDI_TEXT
Definition: commctrl.h:704
#define HDN_DIVIDERDBLCLICK
Definition: commctrl.h:870
#define HDF_CENTER
Definition: commctrl.h:715
#define Header_SetItem(hwndHD, i, phdi)
Definition: commctrl.h:758
#define HDF_RIGHT
Definition: commctrl.h:714
#define Header_InsertItem(hwndHD, i, phdi)
Definition: commctrl.h:741
_Out_opt_ int * cx
Definition: commctrl.h:585
#define HDI_WIDTH
Definition: commctrl.h:702
#define HDN_TRACK
Definition: commctrl.h:873
#define ImageList_LoadBitmap(hi, lpbmp, cx, cGrow, crMask)
Definition: commctrl.h:558
#define HDF_STRING
Definition: commctrl.h:720
#define HDI_FORMAT
Definition: commctrl.h:705
#define CLR_DEFAULT
Definition: commctrl.h:320
#define HDS_HORZ
Definition: commctrl.h:628
#define HD_NOTIFY
Definition: commctrl.h:878
#define err(...)
const WCHAR * str
base of all file and directory entries
Definition: entries.h:83
HINSTANCE _hInstance
Definition: globals.h:270
IconCache _icon_cache
Definition: globals.h:285
MDI child window displaying file lists.
Definition: filechild.h:89
const Icon & get_icon(int icon_id)
Definition: explorer.cpp:625
void draw(HDC hdc, int x, int y, int cx, int cy, COLORREF bk_color, HBRUSH bk_brush) const
Definition: explorer.cpp:277
Explorer frame window base class.
Definition: mainframe.h:42
menu info structure
Definition: window.h:276
HMENU _hMenuView
Definition: window.h:277
void output_number(LPDRAWITEMSTRUCT dis, int *positions, int col, LPCTSTR str)
Definition: pane.cpp:910
void output_text(LPDRAWITEMSTRUCT dis, int *positions, int col, LPCTSTR str, DWORD flags)
Definition: pane.cpp:881
void init_output(HWND hwnd)
Definition: pane.cpp:865
OutputWorker()
Definition: pane.cpp:860
SIZE _spaceSize
Definition: pane.h:59
TCHAR _num_sep
Definition: pane.h:60
HFONT _hfont
Definition: pane.h:61
void output_tabbed_text(LPDRAWITEMSTRUCT dis, int *positions, int col, LPCTSTR str)
Definition: pane.cpp:894
void calc_width(LPDRAWITEMSTRUCT dis, int col, LPCTSTR str)
Definition: pane.cpp:632
BOOL command(UINT cmd)
Definition: pane.cpp:942
virtual int Notify(int id, NMHDR *pnmh)
Definition: pane.cpp:786
bool create_header(HWND parent, int id)
Definition: pane.cpp:127
int _visible_cols
Definition: pane.h:84
int insert_entries(Entry *dir, int idx=-1)
Definition: pane.cpp:658
bool calc_widths(bool anyway)
Definition: pane.cpp:178
int _widths[COLUMNS]
Definition: pane.h:74
WindowHandle _hwndHeader
Definition: pane.h:77
Entry * _root
Definition: pane.h:79
~Pane()
Definition: pane.cpp:92
int _positions[COLUMNS+1]
Definition: pane.h:75
void draw_item(LPDRAWITEMSTRUCT dis, Entry *entry, int calcWidthCol=-1)
Definition: pane.cpp:298
virtual LRESULT WndProc(UINT nmsg, WPARAM wparam, LPARAM lparam)
Definition: pane.cpp:98
Pane(HWND hparent, int id, int id_header, Entry *rool, bool treePane, int visible_cols)
Definition: pane.cpp:73
bool _treePane
Definition: pane.h:85
OutputWorker _out_wrkr
Definition: pane.h:108
struct MainFrameBase * get_frame()
Definition: pane.cpp:990
void set_header()
Definition: pane.cpp:693
COLORREF _clrCompressed
Definition: pane.h:82
void calc_single_width(int col)
Definition: pane.cpp:726
void init()
Definition: pane.cpp:153
HIMAGELIST _himl
Definition: pane.h:107
void calc_tabbed_width(LPDRAWITEMSTRUCT dis, int col, LPCTSTR str)
Definition: pane.cpp:642
virtual LRESULT WndProc(UINT nmsg, WPARAM wparam, LPARAM lparam)
Definition: window.cpp:343
virtual int Notify(int id, NMHDR *pnmh)
Definition: window.cpp:353
DWORD dwHighDateTime
Definition: mapidefs.h:66
DWORD dwLowDateTime
Definition: mapidefs.h:65
Definition: ftp_var.h:139
UINT code
Definition: winuser.h:3149
LONG right
Definition: windef.h:308
LONG bottom
Definition: windef.h:309
LONG top
Definition: windef.h:307
LONG left
Definition: windef.h:306
LONG cx
Definition: windef.h:334
unsigned char * LPBYTE
Definition: typedefs.h:53
uint64_t ULONGLONG
Definition: typedefs.h:67
#define lstrcpy
Definition: winbase.h:3745
#define lstrlen
Definition: winbase.h:3747
_In_ LONG _In_ HWND hwnd
Definition: winddi.h:4023
LONG_PTR LPARAM
Definition: windef.h:208
LONG_PTR LRESULT
Definition: windef.h:209
UINT_PTR WPARAM
Definition: windef.h:207
DWORD COLORREF
Definition: windef.h:300
#define SelectFont(hdc, hfont)
Definition: windowsx.h:516
#define SetWindowFont(hwnd, hfont, fRedraw)
Definition: windowsx.h:533
#define ListBox_GetItemData(hwndCtl, index)
Definition: windowsx.h:483
#define ListBox_InsertItemData(hwndCtl, index, data)
Definition: windowsx.h:492
#define GetStockFont(i)
Definition: windowsx.h:308
#define ListBox_SetSel(hwndCtl, fSelect, index)
Definition: windowsx.h:504
#define ListBox_GetCount(hwndCtl)
Definition: windowsx.h:480
#define ListBox_SetHorizontalExtent(hwndCtl, cxExtent)
Definition: windowsx.h:501
int WINAPI GetDeviceCaps(_In_opt_ HDC, _In_ int)
HRGN WINAPI CreateRectRgn(_In_ int, _In_ int, _In_ int, _In_ int)
#define LOGPIXELSY
Definition: wingdi.h:719
#define GetTextExtentPoint32
Definition: wingdi.h:4472
#define DEFAULT_GUI_FONT
Definition: wingdi.h:909
HGDIOBJ WINAPI SelectObject(_In_ HDC, _In_ HGDIOBJ)
Definition: dc.c:1539
BOOL WINAPI MoveToEx(_In_ HDC, _In_ int, _In_ int, _Out_opt_ LPPOINT)
int WINAPI GetClipRgn(_In_ HDC, _In_ HRGN)
#define TRANSPARENT
Definition: wingdi.h:950
#define RGN_AND
Definition: wingdi.h:356
#define CreateFont
Definition: wingdi.h:4443
int WINAPI FillRect(HDC, LPCRECT, HBRUSH)
int WINAPI SetBkMode(_In_ HDC, _In_ int)
Definition: dc.c:1056
COLORREF WINAPI SetTextColor(_In_ HDC, _In_ COLORREF)
Definition: text.c:918
HRGN WINAPI CreateRectRgnIndirect(_In_ LPCRECT)
HBRUSH WINAPI CreateSolidBrush(_In_ COLORREF)
int WINAPI SelectClipRgn(_In_ HDC, _In_opt_ HRGN)
BOOL WINAPI LineTo(_In_ HDC, _In_ int, _In_ int)
int WINAPI ExtSelectClipRgn(_In_ HDC, _In_opt_ HRGN, _In_ int)
#define GetNumberFormat
Definition: winnls.h:1187
#define GetTimeFormat
Definition: winnls.h:1189
#define GetDateFormat
Definition: winnls.h:1184
#define HKEY_CURRENT_USER
Definition: winreg.h:11
#define RegQueryValueEx
Definition: winreg.h:524
#define RegOpenKey
Definition: winreg.h:519
int WINAPI ReleaseDC(_In_opt_ HWND, _In_ HDC)
DWORD WINAPI GetSysColor(_In_ int)
#define MF_BYCOMMAND
Definition: winuser.h:202
#define DT_NOPREFIX
Definition: winuser.h:537
BOOL WINAPI RedrawWindow(_In_opt_ HWND, _In_opt_ LPCRECT, _In_opt_ HRGN, _In_ UINT)
#define VK_TAB
Definition: winuser.h:2189
#define WM_HSCROLL
Definition: winuser.h:1733
#define COLOR_WINDOW
Definition: winuser.h:912
#define DT_END_ELLIPSIS
Definition: winuser.h:529
#define COLOR_HIGHLIGHT
Definition: winuser.h:920
#define DT_SINGLELINE
Definition: winuser.h:540
#define DT_TABSTOP
Definition: winuser.h:541
#define SW_INVALIDATE
Definition: winuser.h:2569
#define SM_CYSMICON
Definition: winuser.h:1007
#define WM_SETFOCUS
Definition: winuser.h:1603
#define MF_CHECKED
Definition: winuser.h:132
#define RDW_UPDATENOW
Definition: winuser.h:1210
DWORD WINAPI CheckMenuItem(_In_ HMENU, _In_ UINT, _In_ UINT)
#define DrawText
Definition: winuser.h:5761
#define CreateWindow
Definition: winuser.h:5744
#define SendMessage
Definition: winuser.h:5833
#define COLOR_HIGHLIGHTTEXT
Definition: winuser.h:921
HDC WINAPI GetDC(_In_opt_ HWND)
#define wsprintf
Definition: winuser.h:5855
HWND WINAPI GetParent(_In_ HWND)
#define WM_KEYDOWN
Definition: winuser.h:1705
#define DT_RIGHT
Definition: winuser.h:538
int WINAPI GetScrollPos(_In_ HWND, _In_ int)
BOOL WINAPI InvalidateRect(_In_opt_ HWND, _In_opt_ LPCRECT, _In_ BOOL)
#define DT_EXPANDTABS
Definition: winuser.h:532
#define DT_CALCRECT
Definition: winuser.h:526
#define MAKEINTRESOURCE
Definition: winuser.h:591
int WINAPI ScrollWindowEx(_In_ HWND, _In_ int, _In_ int, _In_opt_ LPCRECT, _In_opt_ LPCRECT, _In_opt_ HRGN, _Out_opt_ LPRECT, _In_ UINT)
#define ODS_FOCUS
Definition: winuser.h:2539
int WINAPI GetSystemMetrics(_In_ int)
#define RDW_INVALIDATE
Definition: winuser.h:1204
#define SB_HORZ
Definition: winuser.h:552
char TCHAR
Definition: xmlstorage.h:189
const CHAR * LPCTSTR
Definition: xmlstorage.h:193
CHAR * LPTSTR
Definition: xmlstorage.h:192