|
This is my MFC dialog project.
Im working on code to change my systray clock color to some colors.
both background and text to different color.
take a look at my code.
void CStart_Button_ChangerDlg::OnClock()
{
RECT rc;
HWND hWnd = ::FindWindow("Shell_TrayWnd", NULL);
if (hWnd) {
if (NULL != (hWnd = ::FindWindowEx(hWnd, NULL, "TrayNotifyWnd", NULL))) {
if (NULL != (hWnd = ::FindWindowEx(hWnd, NULL, "TrayClockWClass", NULL))) {
//::SendMessage(hWnd, WM_SETTEXT, 0, (LPARAM)(LPTSTR) TEXT("TEST") );
HDC hdcClock;
COLORREF col;
HDC hdc;
char s[1024];
if(hdcClock) DeleteDC(hdcClock); hdcClock = NULL;
//if(bFillTray)
hWnd = ::GetParent(hWnd);
::GetClientRect(hWnd, &rc);
hdc = ::GetDC(NULL);
hdcClock = CreateCompatibleDC(hdc);
if(!hdcClock)
{
::ReleaseDC(NULL, hdc);
return;
}
//SelectObject(hdcClock, hFon);
SetBkColor(hdcClock, RGB(0,0,255));
SetBkMode(hdcClock, TRANSPARENT);
SetTextAlign(hdcClock, TA_CENTER|TA_TOP);
SetTextColor(hdcClock, RGB(0,255,255));
//FillClock(hWnd, hdcClock, &rc, 0);
HBRUSH hbr;
HDC hdcTemp;
int nblink;
RECT *prc;
if(nblink == 0 || (nblink % 2)) col = RGB(255,255,0);
else col = RGB(255,0,0);
//if(col & 0x80000000) col = GetSysColor(col & 0x00ffffff);
//SetBkMode(hdc, OPAQUE);
//SetBkColor(hdc, col);
hbr = CreateSolidBrush(col);
FillRect(hdc, prc, hbr);
DeleteObject(hbr);
::ReleaseDC(NULL, hdc);
MessageBox("TEST PASSED");
}
}
}
|
|
|
|
|
I put this code in a project and compiled it. Do you ignore warnings, or are they turned off ?
HDC hdcClock;
COLORREF col;
HDC hdc;
char s[1024];
if(hdcClock) DeleteDC(hdcClock); hdcClock = NULL;
You do not set hdcClock to NULL when you create it, and you never set it to anything else before trying to delete it. It's not NULL, and so it will try to delete it, but it won't point to anything valid.
int nblink;
RECT *prc;
if(nblink == 0 || (nblink % 2)) col = RGB(255,255,0);
nblink, same problem.
RECT *prc;
if(nblink == 0 || (nblink % 2)) col = RGB(255,255,0);
else col = RGB(255,0,0);
//if(col & 0x80000000) col = GetSysColor(col & 0x00ffffff);
//SetBkMode(hdc, OPAQUE);
//SetBkColor(hdc, col);
hbr = CreateSolidBrush(col);
FillRect(hdc, prc, hbr);
same problem - prc.
NEVER create a variable without initialising it's value. And goodness knows what half this code was trying to do, I assume you found an online sample and deleted half the code ?
Also, you should step through the debugger first, before asking for help. If you do that, you may solve the problem and you'll at least be able to tell us the line that blows up, and the error you get ( actually, you should have been able to tell us the error anyhow ).
Christian Graus - Microsoft MVP - C++
|
|
|
|
|
my program is a dialog based one ,and i called AfxSocketInit(NULL) successfully!
but a error occured when program run to mysocket.create() in my thread function(debug assertion failed )
who can tell me what's the posible problem
thanks
|
|
|
|
|
Did you call AfxSocketInit(NULL) in your thread?
John
|
|
|
|
|
i did .i call AfxSocketInit(NULL) in main thread (in mydialog::OnInitDialog())
and CSocket is a work thread variable
UINT DoScan(LPVOID lppara)
{
.............
CSocket scansocket;
scansocket.Create(); /////////error occur when running
.............
}
|
|
|
|
|
rtfm - what parameters does CSocket::Create(...) require - i.e. none - now have a look at what creating a TCP/IP or indeed any other type of socket actually requires.
CSocket() is almost a non-sequiteur.
|
|
|
|
|
i call create() with no parameter ,this can work
the error is run-time error
|
|
|
|
|
Hello !
I don't have a lot of experience with GDI... So here is my question: I have wo Device contexts, the source and the destination. In the destination, there is already some drawing. Now, I want to paste my source DC (which contains a bitmap) over the desination DC but using a transparent blitting, that is the background color of the source must not be copied (and the other colors must be kept like they are, so not using bitwise operators).
Is such a thing possible ? If yes, how to do that ?
Thanks
|
|
|
|
|
|
|
Hi !
Thanks for the response but I have a linker error: error LNK2001: unresolved external symbol __imp__TransparentBlt@44.
And also, I am using MFC objects (CDC, CBitmap, ...) and this function is not defined in the CDC class. So maybe it can lead to problems if I mix CDC with HDC...
|
|
|
|
|
cedric moonen wrote:
Thanks for the response but I have a linker error: error LNK2001: unresolved external symbol __imp__TransparentBlt@44.
That means you are not linking to the right library for this function. Do you have VC7, or if you're using VC6, do you have a platoform SDK installed apart from the one that came with it ( you must do, otherwise you wouldn't get to the linking stage ). If the latter, perhaps your lib directory is not set up, but your include directory is.
cedric moonen wrote:
So maybe it can lead to problems if I mix CDC with HDC...
No - a CDC is just a wrapper around a HDC, they boil down to the same thing with some helper functions. TransparentBlt is not supported by W95, and VC6 did not come with TransparentBlt, etc, because they did not exist. therefore, VC6 users need to have a more recent platform SDK installed in order for the compiler to know how to call those functions. It sounds like your compiler can find the header files that define this function, but not the lib file required at linking time, therefore I think you have VC6 and a Platform SDK that is not installed properly.
And obviously, if you use TransparentBlt, your exe won't run on W95. If it needs to, I wrote a W95 compatible version of TransparentBlt and AlphaBlend years ago, it's hosted on the Windows Developer Journal site. If you google 'Graus AlphaBlend TransparentBlt', you're bound to find it.
Christian Graus - Microsoft MVP - C++
|
|
|
|
|
Christian Graus wrote:
Do you have VC7, or if you're using VC6, do you have a platoform SDK installed apart from the one that came with it
That could be the problem: I'm using VC6 and I didn't install any extra SDK...
Christian Graus wrote:
If you google 'Graus AlphaBlend TransparentBlt', you're bound to find it.
Thanks, I found it, it seems interesting. I'll have a deeper look at it when I have time.
Thanks for your help
|
|
|
|
|
Search for article ExBitamp; I included a function called TransBlt in ExBitmap.cpp that works on Win31 and above (you can probably improve on it).
INTP
"The more help VB provides VB programmers, the more miserable your life as a C++ programmer becomes."
Andrew W. Troelsen
|
|
|
|
|
i have a a string (CString) of length 18 = "999999999999999.99" and i want to convet to a double value as 999999999999999.99 i have used the atof function but the value is getting truncated . i have tried in VC++ still the same value .
anup r nambiar
|
|
|
|
|
A double will always be an approximation. You're asking for too much precision on the left hand side, so it's rounding on the right.
Christian Graus - Microsoft MVP - C++
|
|
|
|
|
No - the problem is that the precision exceeds the 15 digit precision limit for a double.
The example had a 17 digit number (excluding the decimal point) and should be handled correctly by using a long double.
|
|
|
|
|
i have tried even that. i got the 15 digit in a int64 data type and the float value in a float type . the 2 were added in a long double type but the result was still rounded off
|
|
|
|
|
See my reply to Christian...
Doubles and long doubles are synonymous unless ... I seem to recall there is a true long (80 bit i.e. IEEE long double) library in the win32 sdk.
|
|
|
|
|
I have been reading an article about accessing USB devices via C# and the article states a GUID for a specific USB device driver. I was wondering how does one find that information for other USB device drivers.
I am the handsome one in the crowd.
|
|
|
|
|
Iam using MDI Doc - View Architecture . Iam creating MDI child windows at run time .But these child windows are not enabled for scrolling.
I did the following to enable the scroll bars.
BOOL CChildFrame::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: Modify the Window class or styles here by modifying the CREATESTRUCT cs
if( !CMDIChildWnd::PreCreateWindow(cs) )
return FALSE;
cs.style = WS_CHILD|WS_OVERLAPPEDWINDOW|WS_CAPTION|WS_MINIMIZEBOX|WS_SIZEBOX|WS_VSCROLL|WS_HSCROLL;
//cs.dwExStyle = WS_EX_RIGHTSCROLLBAR;
return TRUE;
}
The first problem is that doing this causes the title of the child windows to vanish. But the scrolls are enabled.
Now the second problem is do I need to override the OnVScroll() and OnHScroll() functions to implement scrolling .If so how please let me know.
laiju
|
|
|
|
|
I'm afraid you have it around the wrong way - you obviously don't understand the DOC/VIEW architecture.
The frame (DOC) is merely a container for the view (VIEW) - so I suggest you read a little further (or back) into your class notes and see what type of VIEWS (C...View) are available.
trelliot
|
|
|
|
|
You need to add the scroll bars to your view, not to the frame.
Ryan "Punctuality is only a virtue for those who aren't smart enough to think of good excuses for being late" John Nichol "Point Of Impact"
|
|
|
|
|
Along with doing this in the view and not the frame you should change the following:
cs.style = WS_CHILD|WS_OVERLAPPEDWINDOW|WS_CAPTION|WS_MINIMIZEBOX|WS_SIZEBOX|WS_VSCROLL|WS_HSCROLL;
to
cs.style |= WS_VSCROLL|WS_HSCROLL;
that way you do not have to know (nor care) what other creation flags are already set.
As for actual scrolling (w/o using CScrollView), you'll have to maintian a position indicator for the upper left hand courner (where drawing is supposed to start), then add or subtrack from that value (depending and direction of scroll). To do it right requires a bit more than that but it is a good starting position.
Good luck!
INTP
"The more help VB provides VB programmers, the more miserable your life as a C++ programmer becomes."
Andrew W. Troelsen
|
|
|
|
|
how to set timeout value in programm using csocket class ?
thanks
|
|
|
|