ObjReader Community
Discussion => Post Your Questions & Comments Here => Topic started by: James Morgan on October 02, 2021, 10:31:43 pm
-
in wm_ctlcolorstatic i used lparam in another compiler and the handle of that control to make a wm_colorstatic color for each control difference how can i do that in c++
trying in c++ vc++
HWND hCtl = CreateWindowEx(0,L"static",L"Label1" , WS_CHILD|WS_VISIBLE,40,40,80,30,hWnd,(HMENU)IDC_LABEL1,hIns,0);
// cl JMorgan2.cpp user32.lib gdi32.lib
#ifndef UNICODE
#define UNICODE
#endif
#ifndef _UNICODE
#define _UNICODE
#endif
#include <windows.h>
#define IDC_LABEL1 2000
#define IDC_LABEL2 2002
HWND hCTL;
HWND lParam;
//HBRUSH hBrush;
const COLORREF rgbRed = 0X000000FF;
const COLORREF rgbGreen = 0x0000FF00;
const COLORREF rgbBlue = 0x00FF0000;
const COLORREF rgbBlack = 0x00000000;
const COLORREF rgbWhite = 0x00FFFFFF;
LRESULT CALLBACK fnWndProc(HWND hWnd, unsigned int msg, WPARAM wParam, LPARAM lParam)
{
HWND hCtl;
switch(msg)
{
case WM_CREATE:
{
HINSTANCE hIns = ((LPCREATESTRUCT)lParam)->hInstance;
HBRUSH hBrush = CreateSolidBrush(RGB(255,255,100)); // Create a non-standard color HBRUSH for main window
HWND hCtl = CreateWindowEx(0,L"static",L"Label1" , WS_CHILD|WS_VISIBLE,40,40,80,30,hWnd,(HMENU)IDC_LABEL1,hIns,0);
HWND hCtl1 = CreateWindowEx(0, L"static", L"Label2", WS_CHILD | WS_VISIBLE,40,60, 80, 30, hWnd, (HMENU)IDC_LABEL2, hIns, 0);
SetWindowLongPtr(hWnd,0*sizeof(void*),(LONG_PTR)hBrush); // Store HBRUSH as part of Window Class Structure
return 0;
}
case WM_CTLCOLORSTATIC: // Do not allow DefWindowProc() to process this message!
if(lParam ( hCtl))
{ // When a WM_CTLCOLORSTATIC message comes through, return
SetBkMode((HDC)wParam,TRANSPARENT);
SetTextColor((HDC)wParam, rgbRed); // RGB(20, 20, 240));
//' SetTextColor((HDC)wParam , COLORREF(0xFF, 0x00, 0x00));
// from the Window Procedure call without a DefWindowProc()
return GetWindowLongPtr(hWnd,0*sizeof(void*)); // call. Instead return the HBRUSH stored as an instance
} // variable as part of the WNDCLASSEX object.
case WM_DESTROY:
{
HBRUSH hBrush=(HBRUSH)GetWindowLongPtr(hWnd,0*sizeof(void*));
DeleteObject(hBrush); // Delete dynamically allocated GDI resource stored in
PostQuitMessage(0); // Window Class Structure
return 0;
}
}
return (DefWindowProc(hWnd, msg, wParam, lParam));
}
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevIns, LPSTR lpszArgument, int iShow)
{
wchar_t szClassName[]=L"Form1";
WNDCLASSEX wc;
MSG messages;
HWND hWnd;
memset(&wc,0,sizeof(WNDCLASSEX));
wc.lpszClassName = szClassName;
wc.lpfnWndProc = fnWndProc;
wc.cbSize = sizeof(WNDCLASSEX);
wc.hbrBackground = CreateSolidBrush(RGB(255, 255, 100)); //hBrush//(HBRUSH)COLOR_WINDOW;
wc.hInstance = hInstance;
wc.cbWndExtra = sizeof(void*);
RegisterClassEx(&wc);
hWnd=CreateWindowEx(0,szClassName,szClassName,WS_OVERLAPPEDWINDOW,200,175,320,200,HWND_DESKTOP,0,hInstance,0);
ShowWindow(hWnd,iShow);
while(GetMessage(&messages,NULL,0,0))
{
TranslateMessage(&messages);
DispatchMessage(&messages);
}
return (int)messages.wParam;
}
#if 0
Note that the 'Build Model' of C or C++ is totally and completely different from PowerBASIC.By
'Build Model' I mean the steps involved in reading in text source files and creating an executable
binary.
In C or C++ the building of an executable or binary has two steps both of which are completely under
the full control of the programmer.These two steps are compilation as done by cl.exe and linking
as done by link.exe.
In PowerBASIC compilation and linking are done by the compiler in one step which the coder has no
control over.
Declare Function SetBkMode Lib "GDI32.DLL" Alias "SetBkMode" (Byval hdc As Dword, Byval nBkMode As Long) As Long
#endif
thanks
-
J.M.
Have a look at the code of the MIDIpiano project.
http://www.objreader.com/index.php?topic=47.0
case WM_CTLCOLOREDIT:
case WM_CTLCOLORLISTBOX:
SetBkColor((HDC) wParam, GetSysColor(COLOR_INFOBK));
SetTextColor((HDC) wParam, GetSysColor(COLOR_INFOTEXT));
return (LRESULT) GetSysColorBrush(COLOR_INFOBK);
case WM_CTLCOLORSTATIC: // Simple stunt to avoid focus rect flashing in TrackBars
switch (GetDlgCtrlID((HWND) lParam)) {
case IDC_TRACKBAR1:
case IDC_TRACKBAR2:
case IDC_TRACKBAR3:
case IDC_TRACKBAR4:
SetFocus(gP.hPiano);
}
break;
and the MSDN documentation
https://docs.microsoft.com/en-us/windows/win32/controls/wm-ctlcolorstatic
case WM_CTLCOLORSTATIC:
{
HDC hdcStatic = (HDC) wParam;
SetTextColor(hdcStatic, RGB(255,255,255));
SetBkColor(hdcStatic, RGB(0,0,0));
if (hbrBkgnd == NULL)
{
hbrBkgnd = CreateSolidBrush(RGB(0,0,0));
}
return (INT_PTR)hbrBkgnd;
}
-
Thanks
have not tried it yet
wParam
Handle to the device context for the static control window.
i never have understood this
thanks for quick answer
-
The wParam hDC is the device context being used to process painting, like in WM_PAINT.
https://docs.microsoft.com/en-us/windows/win32/gdi/device-contexts#:~:text=A%20device%20context%20is%20a,graphic%20modes%20that%20affect%20output.
-
WM_CTLCOLORSTATIC
switch (GetDlgCtrlID((HWND) lParam)) {
case IDC_LABEL1:
SetBkMode((HDC)wParam, TRANSPARENT);
SetTextColor((HDC)wParam, rgbRed);
return GetWindowLongPtr(hWnd, 0 * sizeof(void*));
}
break;
i could not get this to work
with WM_CTLCOLORSTATIC
I AM USING VS 2019
IF I TRY TO USE
switch (GetDlgCtrlID((HWND) lParam))
I COMPILE BUT NOT EXE
I HAVE TWO LABEL
I WANT THEM IN DIFFERENCE COLORS
IN PB
I USE
CASE %WM_CTLCOLORSTATIC 'FOR READONLY EDIT OR STASTICE
Select Case Cb.lparam
case hBut(29) , hBut(33) ' DWORD HANDLE CONTROL IS CREATED BY API CREATEWINDOW
lbgcolor = %RGB_SaddleBrown
' SetBkColor CB.WPARAM, lbgcolor ' set text background color
SetBkMode CB.WPARAM, %TRANSPARENT
SetTextColor CB.WPARAM, %RGB_WHITE ' set text color
hbrush = CreateSolidBrush(lBGColor)
FUNCTION = hBrush ' set window background color THE hBrush IS DEFINED IN %WM_PAINT
EXIT FUNCTION
End Select
Select Case Cb.lparam
case hBUT(27) ' DWORD HANDLE CONTROL IS CREATED BY API CREATEWINDOW
lbgcolor = %RGB_RifleGreen
' SetBkColor CB.WPARAM, lbgcolor ' set text background color
SetBkMode CB.WPARAM, %TRANSPARENT
SetTextColor CB.WPARAM, %RGB_WHITE ' set text color
hbrush = CreateSolidBrush(lBGColor)
FUNCTION = hBrush ' set window background color THE hBrush IS DEFINED IN %WM_PAINT
EXIT FUNCTION
End Select
I AM DOING SOMETHING WRONG????
THANKS AND YOUR PATIENCE
-
case WM_COLORSTATIC:
if (GetDlgCtrlID((HWND) lParam) == IDC_LABEL1) {
SetTextColor((HDC) wParam, RGB(255,0,0));
SetBkColor((HDC) wParam, TRANSPARENT);
return (LONG_PTR) GetStockObject(NULL_BRUSH);
}
break;
-
HELLO
JAMES POWERBASIC TO WIN 32API OR C++
Type INCTL
IN As String * 2
JJ as Long
BB as Dword
CRLF As String * 2
End Type
GLOBAL INB AS STRING
GLOBAL JJB AS LONG
GLOBAL BBJ AS DWORD
Global INCTL2 As INCTL
Open "CTLSW32.INC" For Random Shared As #5 Len = Len(INCTL2)
Z = 1
Get #5, Z, INCTL2
INB = INCTL2.IN
JJB = INCTL2.JJ
BBJ = INCTL2.BB
CLOSE #5
Open "CTLSW32.INC" For Random Shared As #5 Len = Len(INCTL2)
Z = 1
PUT #5, Z, INCTL2
INCTL2.IN = INB
INCTL2.JJ = JJB
INCTL2.BB = BBJ
CLOSE #5
I USE IN POWERBASIC SEVERAL USER-DEFINED DATA TYPES
POWERBASIC USES GET AND PUT WHAT IS NEEDED IN WINAPI OR C++?
THANKS
-
Search MSDN for
Writing
- CreateFile
- WriteFile
- CloseHandle
Reading
- CreateFile
- ReadFile
- CloseHandle
And for a complete C/C++ example, search for zLoadSaveCoordinates in the zTrace utility here:
http://www.objreader.com/index.php?topic=91.0