1522{
1523 POINT point;
1525 LRESULT ret = 0;
1526
1527
1528
1529
1530 for (
unsigned int i=0; i <
g_Menues.size(); i++)
1531 {
1533 {
1535 break;
1536 }
1537 }
1538
1539
1540 if (p == NULL) return DefWindowProc(hwnd, uMsg, wParam, lParam);
1541
1542
1543
1544
1545
1546 if (uMsg >= WM_USER)
1547 {
1548 LRESULT lResult = 0;
1549
1550 if (p->
OnUser((
int) uMsg, wParam, lParam, lResult))
return lResult;
1551 }
1552
1553
1554
1555 switch (uMsg)
1556 {
1557 case WM_NCHITTEST:
1558 {
1559
1560
1561
1562
1563
1564
1565
1567
1568 GetCursorPos(&point);
1569 ScreenToClient(hwnd, &point);
1570 RECT r;
1571 GetClientRect(hwnd, &r);
1576
1577 if (!PtInRect(&r, point))
1578 {
1579
1580 return HTCAPTION;
1581 }
1582
1583 return HTCLIENT;
1584 }
1585 break;
1586
1587
1588
1589 case WM_NCMOUSEMOVE:
1590 {
1592 {
1595 ScreenToClient(hwnd, &point);
1596 p->
Mouse(WM_MOUSEMOVE, point.x, point.y);
1597 }
1598
1599 return 0;
1600 }
1601 break;
1602
1603
1604
1605 case WM_NCLBUTTONUP:
1606 case WM_NCRBUTTONUP:
1607 case WM_NCMBUTTONUP:
1608 case WM_NCLBUTTONDBLCLK:
1609 {
1612 ScreenToClient(hwnd, &point);
1613 p->
Mouse(uMsg, point.x, point.y);
1614 return 0;
1615 }
1616 break;
1617
1618
1619
1620
1621
1622
1623
1624
1625
1626
1627
1628 case WM_MOUSEMOVE:
1629 {
1631 {
1632
1633
1634 static int lastX = 0;
1635 static int lastY = 0;
1636
1638 return 0;
1639
1642
1644 }
1645
1646 return 0;
1647 }
1648 break;
1649
1650
1651
1652 case WM_LBUTTONUP:
1653 case WM_RBUTTONUP:
1654 case WM_MBUTTONUP:
1655 case WM_LBUTTONDOWN:
1656 case WM_RBUTTONDOWN:
1657 case WM_MBUTTONDOWN:
1658 case WM_LBUTTONDBLCLK:
1659 {
1661 return 0;
1662 }
1663 break;
1664
1665
1666
1667 case WM_EXITSIZEMOVE:
1668 {
1669 RECT r;
1673 return 0;
1674 }
1675 break;
1676
1677
1678
1679 case WM_MOUSEWHEEL:
1680 {
1681 if (GET_WHEEL_DELTA_WPARAM(wParam) < 0) p->
Mouse(uMsg, 0, 0);
1682 else p->
Mouse(uMsg, 1, 0);
1683 return 0;
1684 }
1685 break;
1686
1687
1688
1689
1690
1691 case WM_KEYDOWN:
1692 {
1695
1696 switch(wParam)
1697 {
1698 case VK_DOWN:
1699 case VK_UP:
1700 case VK_RIGHT:
1701 case VK_LEFT:
1702 case VK_HOME:
1703 case VK_END:
1704 case VK_SPACE:
1705 case VK_RETURN:
1706 case VK_PRIOR:
1707 case VK_ADD:
1708 case VK_NEXT:
1709 case VK_SUBTRACT:
1710 {
1713
1714 if (wParam == VK_HOME)
1715 {
1718
1719 int screenHeight = GetSystemMetrics(SM_CYVIRTUALSCREEN);
1720 int screenY = GetSystemMetrics(SM_YVIRTUALSCREEN);
1722
1724 (*i1)->Active(true);
1725
1727 }
1728 else if (wParam == VK_END)
1729 {
1732
1733 int screenHeight = GetSystemMetrics(SM_CYVIRTUALSCREEN);
1735
1737 (*i1)->Active(true);
1738
1740 }
1741 else
1742 {
1743 bool activeFound = false;
1745 {
1746 if ((*i1)->IsActive())
1747 {
1749 activeFound = true;
1750 break;
1751 }
1752 }
1753
1754 if (!activeFound)
1755 {
1757 i1++;
1758 i1++;
1759 (*i1)->Active(true);
1760 }
1761 else
1762 {
1763 i2 = i1;
1764
1765 if (wParam == VK_DOWN)
1766 {
1768 {
1769 i2++;
1770 if ((*i2)->m_pParent == m)
1771 {
1773 {
1774 (*i1)->Active(false);
1776
1777
1778 int screenHeight = GetSystemMetrics(SM_CYVIRTUALSCREEN);
1780 {
1783 }
1784
1785 (*i2)->Active(true);
1786
1788 break;
1789 }
1790 }
1791 }
1792 }
1793 else if (wParam == VK_UP)
1794 {
1796 {
1797 i2--;
1798 if ((*i2)->m_pParent == m)
1799 {
1801 {
1802 (*i1)->Active(false);
1804
1805
1806 int screenHeight = GetSystemMetrics(SM_CYVIRTUALSCREEN);
1808 {
1810 int screenY = GetSystemMetrics(SM_YVIRTUALSCREEN);
1812 }
1813
1814 (*i2)->Active(true);
1815
1817 break;
1818 }
1819 }
1820 }
1821 }
1822 else if (wParam == VK_RIGHT)
1823 {
1825 {
1826 FolderItem* item = (FolderItem*)*i1;
1828 SetForegroundWindow((*i1)->m_pSubMenu->GetWindow());
1829 SendMessage((*i1)->m_pSubMenu->GetWindow(), WM_KEYDOWN, VK_HOME, NULL);
1830 return 0;
1831 }
1832 }
1833 else if (wParam == VK_LEFT)
1834 {
1835 if ((*i1)->m_pParent->GetParent() != NULL)
1836 {
1837 (*i1)->Active(false);
1840 Menu* parentMenu = (*i1)->m_pParent->GetParent();
1841 SetForegroundWindow(parentMenu->
GetWindow());
1843 }
1844 }
1845 else if (wParam == VK_SPACE)
1846 {
1848 return 0;
1849 }
1850 else if (wParam == VK_RETURN)
1851 {
1853 return 0;
1854 }
1855 else if ((wParam == VK_PRIOR) || (wParam == VK_ADD))
1856 {
1858 {
1859 POINT pt;
1860 pt.x = (*i1)->m_nLeft + (*i1)->m_nWidth - 1;
1861 pt.y = (*i1)->m_nTop;
1862 (*i1)->Mouse(WM_LBUTTONUP, pt);
1863 return 0;
1864 }
1865 }
1866 else if ((wParam == VK_NEXT) || (wParam == VK_SUBTRACT))
1867 {
1869 {
1870 POINT pt;
1871 pt.x = (*i1)->m_nLeft + 1;
1872 pt.y = (*i1)->m_nTop;
1873 (*i1)->Mouse(WM_LBUTTONUP, pt);
1874 return 0;
1875 }
1876 }
1877 }
1878 }
1879
1880
1881 return 0;
1882 }
1883 break;
1884
1885 case VK_INSERT:
1886 {
1887
1888
1889
1891 return 0;
1892 }
1893 break;
1894
1895 case VK_ESCAPE:
1896 case VK_DELETE:
1897 {
1900 return 0;
1901 }
1902 break;
1903
1904 default: { return 0; }
1905 }
1906 }
1907 break;
1908
1909
1910
1911 case WM_CHAR:
1912 {
1915
1916 char typeAhead = tolower((char)wParam);
1917
1919 bool activeFound = false, searchFound = false;
1920
1922 {
1923 if (!activeFound)
1924 {
1925
1926 if ((*i)->IsActive()) activeFound = true;
1927 continue;
1928 }
1929
1930 if (((tolower((*i)->m_pszTitleANSI[0]) == typeAhead)))
1931 {
1932 searchFound = true;
1934 break;
1935 }
1936 }
1937
1938 if (!searchFound)
1939 {
1941 {
1942 if (((tolower((*i)->m_pszTitleANSI[0]) == typeAhead)))
1943 {
1945 break;
1946 }
1947 }
1948 }
1949
1950 return 0;
1951 }
1952
1953
1954
1955 case WM_CLOSE:
1956 return 0;
1957
1958
1959
1960 case WM_ACTIVATE:
1961 {
1962 p->
Activate(LOWORD(wParam), (HWND)lParam);
1963 }
1964 break;
1965
1966
1967
1968 case WM_TIMER:
1969 {
1971 return 0;
1972 }
1973 break;
1974
1975
1976
1977 case WM_MOVING:
1978 {
1980 }
1981 break;
1982
1983
1984
1985
1986
1987
1988
1989
1990
1991
1992
1993
1994
1995
1996
1997
1998 case WM_COMMAND:
1999 {
2001 {
2002
2003
2004
2005
2006
2007 return 0;
2008 }
2009 else p->
Command(wParam, lParam);
2010 }
2011 break;
2012
2013
2014
2015 case WM_MOUSELEAVE:
2016 {
2018 }
2019 break;
2020
2021
2022
2023
2024
2025
2026
2027
2028
2029
2030
2031
2032
2033
2034
2035
2036
2037
2038
2039
2040
2041
2042
2043
2044
2045
2046
2047
2048
2049
2050
2051
2052
2053
2054
2055
2056
2057
2058
2059
2060
2061
2062
2063
2064
2065
2066
2067
2068
2069
2070
2071
2072
2073
2074
2075
2076
2077
2078
2079
2080
2081
2082
2083
2086 {
2088
2089
2091
2092
2095 {
2101 }
2102
2103
2105
2107 }
2108 break;
2109
2110
2111
2113 {
2115
2116 if (wParam == 0)
2117 {
2118 WIN32_FIND_DATA oldData = p->
data;
2120 FindClose(hFind);
2121 if (CompareFileTime(&p->
data.ftLastWriteTime, &oldData.ftLastWriteTime) == 1)
2122 {
2125 }
2126
2128 }
2129 else if (wParam == 1)
2130 {
2132 }
2133 else if (wParam == 2 || wParam == 3 || wParam == 4)
2134 {
2136 }
2137 else if (wParam == 5)
2138 {
2140 }
2141 else if (wParam == 6)
2142 {
2144 }
2145
2147 {
2150 }
2151 }
2152 break;
2153
2154
2155
2157 {
2159
2160
2161 }
2162 break;
2163
2164
2165
2166 case WM_CTLCOLOREDIT:
2167 {
2168
2169
2170 SetTextColor((HDC)wParam, 0x000000);
2171 SetBkColor((HDC)wParam, 0xffffff);
2172 return (LRESULT)GetStockObject(NULL_BRUSH);
2173 }
2174 break;
2175
2176
2177
2178 default:
2179 {
2180 ret = DefWindowProc(hwnd, uMsg, wParam, lParam);
2181 }
2182
2183
2184 }
2185
2186 return ret;
2187}
Menu * pMenu
Definition Blackbox.cpp:40
#define BB_HIDEMENU
Definition BBApi.h:161
#define BB_REDRAWGUI
Definition BBApi.h:220
#define BB_MENU
Definition BBApi.h:160
#define BB_RECONFIGURE
Definition BBApi.h:147
#define BBRG_MENU
Definition BBApi.h:222
void PlaySoundFX(int sound)
Definition Sounds.cpp:40
@ SFX_MENU_NAVIGATE
Definition Sounds.h:43
void ShowSubMenu()
Definition FolderItem.cpp:119
char menuFile[MAX_LINE_LENGTH]
Definition Settings.h:174