- Status update.
- Should create HOTKEY_INFO storage in WM_NCCREATE rather than in WM_CREATE so that we can also add the WS_EX_CLIENTEDGE style. - Remove code that draws the client edge; it is already drawn by DefWindowProc.
This commit is contained in:
parent
a6f9e517fe
commit
7cfe3c9ffc
|
@ -18,8 +18,21 @@
|
||||||
* License along with this library; if not, write to the Free Software
|
* License along with this library; if not, write to the Free Software
|
||||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
*
|
*
|
||||||
|
* This code was audited for completeness against the documented features
|
||||||
|
* of Comctl32.dll version 6.0 on Sep. 21, 2004, by Robert Shearman.
|
||||||
|
*
|
||||||
|
* Unless otherwise noted, we believe this code to be complete, as per
|
||||||
|
* the specification mentioned above.
|
||||||
|
* If you discover missing features or bugs please note them below.
|
||||||
|
*
|
||||||
* TODO:
|
* TODO:
|
||||||
* - What are we meant to do with the WM_CHAR message?
|
* Messages:
|
||||||
|
* WM_CHAR
|
||||||
|
* WM_SYSCHAR
|
||||||
|
* Styles:
|
||||||
|
* WS_DISABLED
|
||||||
|
* Notifications:
|
||||||
|
* EN_CHANGED
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <stdarg.h>
|
#include <stdarg.h>
|
||||||
|
@ -91,7 +104,6 @@ HOTKEY_DrawHotKey(HOTKEY_INFO *infoPtr, LPCWSTR KeyName, WORD NameLen,
|
||||||
LPRECT rc, HDC hdc)
|
LPRECT rc, HDC hdc)
|
||||||
{
|
{
|
||||||
SIZE TextSize;
|
SIZE TextSize;
|
||||||
DWORD dwExStyle = GetWindowLongW (infoPtr->hwndSelf, GWL_EXSTYLE);
|
|
||||||
|
|
||||||
/* We have to allow some space for the frame to be drawn */
|
/* We have to allow some space for the frame to be drawn */
|
||||||
rc->left += 2;
|
rc->left += 2;
|
||||||
|
@ -99,8 +111,6 @@ HOTKEY_DrawHotKey(HOTKEY_INFO *infoPtr, LPCWSTR KeyName, WORD NameLen,
|
||||||
DrawTextW(hdc, KeyName, NameLen, rc, DT_LEFT | DT_VCENTER);
|
DrawTextW(hdc, KeyName, NameLen, rc, DT_LEFT | DT_VCENTER);
|
||||||
rc->left -= 2;
|
rc->left -= 2;
|
||||||
rc->top--;
|
rc->top--;
|
||||||
if(dwExStyle & WS_EX_CLIENTEDGE)
|
|
||||||
DrawEdge(hdc, rc, EDGE_SUNKEN, BF_RECT | BF_ADJUST);
|
|
||||||
|
|
||||||
/* Get the text size and position the caret accordingly */
|
/* Get the text size and position the caret accordingly */
|
||||||
GetTextExtentPoint32W (hdc, KeyName, NameLen, &TextSize);
|
GetTextExtentPoint32W (hdc, KeyName, NameLen, &TextSize);
|
||||||
|
@ -209,28 +219,18 @@ HOTKEY_SetRules(HOTKEY_INFO *infoPtr, WPARAM wParam, LPARAM lParam)
|
||||||
/* << HOTKEY_Char >> */
|
/* << HOTKEY_Char >> */
|
||||||
|
|
||||||
static LRESULT
|
static LRESULT
|
||||||
HOTKEY_Create (HWND hwnd, WPARAM wParam, LPARAM lParam)
|
HOTKEY_Create (HOTKEY_INFO *infoPtr, WPARAM wParam, LPARAM lParam)
|
||||||
{
|
{
|
||||||
HOTKEY_INFO *infoPtr;
|
|
||||||
TEXTMETRICW tm;
|
TEXTMETRICW tm;
|
||||||
HDC hdc;
|
HDC hdc;
|
||||||
|
|
||||||
/* allocate memory for info structure */
|
|
||||||
infoPtr = (HOTKEY_INFO *)Alloc (sizeof(HOTKEY_INFO));
|
|
||||||
SetWindowLongPtrW (hwnd, 0, (DWORD_PTR)infoPtr);
|
|
||||||
|
|
||||||
/* initialize info structure */
|
|
||||||
infoPtr->HotKey = infoPtr->InvComb = infoPtr->InvMod = infoPtr->CurrMod = 0;
|
|
||||||
infoPtr->CaretPos = 2;
|
|
||||||
infoPtr->hwndSelf = hwnd;
|
|
||||||
infoPtr->hwndNotify = ((LPCREATESTRUCTA)lParam)->hwndParent;
|
infoPtr->hwndNotify = ((LPCREATESTRUCTA)lParam)->hwndParent;
|
||||||
LoadStringW(COMCTL32_hModule, HKY_NONE, infoPtr->strNone, 15);
|
|
||||||
|
|
||||||
/* get default font height */
|
/* get default font height */
|
||||||
hdc = GetDC (hwnd);
|
hdc = GetDC (infoPtr->hwndSelf);
|
||||||
GetTextMetricsW (hdc, &tm);
|
GetTextMetricsW (hdc, &tm);
|
||||||
infoPtr->nHeight = tm.tmHeight;
|
infoPtr->nHeight = tm.tmHeight;
|
||||||
ReleaseDC (hwnd, hdc);
|
ReleaseDC (infoPtr->hwndSelf, hdc);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -358,11 +358,24 @@ HOTKEY_LButtonDown (HOTKEY_INFO *infoPtr, WPARAM wParam, LPARAM lParam)
|
||||||
|
|
||||||
|
|
||||||
inline static LRESULT
|
inline static LRESULT
|
||||||
HOTKEY_NCCreate (HOTKEY_INFO *infoPtr, WPARAM wParam, LPARAM lParam)
|
HOTKEY_NCCreate (HWND hwnd, WPARAM wParam, LPARAM lParam)
|
||||||
{
|
{
|
||||||
DWORD dwExStyle = GetWindowLongW (infoPtr->hwndSelf, GWL_EXSTYLE);
|
HOTKEY_INFO *infoPtr;
|
||||||
SetWindowLongW (infoPtr->hwndSelf, GWL_EXSTYLE,
|
DWORD dwExStyle = GetWindowLongW (hwnd, GWL_EXSTYLE);
|
||||||
|
SetWindowLongW (hwnd, GWL_EXSTYLE,
|
||||||
dwExStyle | WS_EX_CLIENTEDGE);
|
dwExStyle | WS_EX_CLIENTEDGE);
|
||||||
|
|
||||||
|
/* allocate memory for info structure */
|
||||||
|
infoPtr = (HOTKEY_INFO *)Alloc (sizeof(HOTKEY_INFO));
|
||||||
|
SetWindowLongPtrW(hwnd, 0, (DWORD_PTR)infoPtr);
|
||||||
|
|
||||||
|
/* initialize info structure */
|
||||||
|
infoPtr->HotKey = infoPtr->InvComb = infoPtr->InvMod = infoPtr->CurrMod = 0;
|
||||||
|
infoPtr->CaretPos = 2;
|
||||||
|
infoPtr->hwndSelf = hwnd;
|
||||||
|
LoadStringW(COMCTL32_hModule, HKY_NONE, infoPtr->strNone, 15);
|
||||||
|
|
||||||
|
|
||||||
return DefWindowProcW (infoPtr->hwndSelf, WM_NCCREATE, wParam, lParam);
|
return DefWindowProcW (infoPtr->hwndSelf, WM_NCCREATE, wParam, lParam);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -414,7 +427,7 @@ HOTKEY_WindowProc (HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
|
||||||
{
|
{
|
||||||
HOTKEY_INFO *infoPtr = HOTKEY_GetInfoPtr (hwnd);
|
HOTKEY_INFO *infoPtr = HOTKEY_GetInfoPtr (hwnd);
|
||||||
TRACE("hwnd=%p msg=%x wparam=%x lparam=%lx\n", hwnd, uMsg, wParam, lParam);
|
TRACE("hwnd=%p msg=%x wparam=%x lparam=%lx\n", hwnd, uMsg, wParam, lParam);
|
||||||
if (!infoPtr && (uMsg != WM_CREATE))
|
if (!infoPtr && (uMsg != WM_NCCREATE))
|
||||||
return DefWindowProcW (hwnd, uMsg, wParam, lParam);
|
return DefWindowProcW (hwnd, uMsg, wParam, lParam);
|
||||||
switch (uMsg)
|
switch (uMsg)
|
||||||
{
|
{
|
||||||
|
@ -430,7 +443,7 @@ HOTKEY_WindowProc (HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
|
||||||
/* case WM_CHAR: */
|
/* case WM_CHAR: */
|
||||||
|
|
||||||
case WM_CREATE:
|
case WM_CREATE:
|
||||||
return HOTKEY_Create (hwnd, wParam, lParam);
|
return HOTKEY_Create (infoPtr, wParam, lParam);
|
||||||
|
|
||||||
case WM_DESTROY:
|
case WM_DESTROY:
|
||||||
return HOTKEY_Destroy (infoPtr, wParam, lParam);
|
return HOTKEY_Destroy (infoPtr, wParam, lParam);
|
||||||
|
@ -459,7 +472,7 @@ HOTKEY_WindowProc (HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
|
||||||
return HOTKEY_LButtonDown (infoPtr, wParam, lParam);
|
return HOTKEY_LButtonDown (infoPtr, wParam, lParam);
|
||||||
|
|
||||||
case WM_NCCREATE:
|
case WM_NCCREATE:
|
||||||
return HOTKEY_NCCreate (infoPtr, wParam, lParam);
|
return HOTKEY_NCCreate (hwnd, wParam, lParam);
|
||||||
|
|
||||||
case WM_PAINT:
|
case WM_PAINT:
|
||||||
HOTKEY_Paint(infoPtr, (HDC)wParam);
|
HOTKEY_Paint(infoPtr, (HDC)wParam);
|
||||||
|
|
Loading…
Reference in New Issue