|
thank you! I updated the SDK and there is no problem now.
|
|
|
|
|
Hi Lucy,
Have you found a way around this problem? I am running into the same difficulty.
Thanks,
Aaron
|
|
|
|
|
yes, check the above answers. I updated the library (from MS web site) and the problem went away.
|
|
|
|
|
Hi,
I'm filling my listview with new item about each 3-4 secs... But the customer wants it to stop blinking (which is due to the redraw each 15 sec). I saw some programs that didn't suffer from this but I wonder how they did it. Should I repaint the whole list on my own or? How should I deal with this?
|
|
|
|
|
Call SetRedraw(false) then fill in the list contents. When you're done, call SetRedraw(true); followed by RedrawWindow()
--Mike--
Just released - RightClick-Encrypt v1.3 - Adds fast & easy file encryption to Explorer
My really out-of-date homepage
Sonork-100.19012 Acid_Helm
|
|
|
|
|
There are several ways to deal with this problem.
1) When refreshing, don't delete all items and re-populate the entire list. Instead only delete the items which do not exist in the new list and update the ones which need updating. During this operation set Redraw() to FALSE.
2) Handle the LVG_GETDISPINFO message. You will find information about this in the MSDN. A Codeproject search may yield some results. If you don't find enough information about how to use this technique, tell me, and I'll write an article.
3) Set Redraw() to FALSE while deleting and adding items in the list. Display an hourglass.
Regards,
James Pullicino
Drinking In The Sun
Forgot Password?
|
|
|
|
|
1)I just ADD only ONE iteam about each 3-4 secs. I don't delete any items
2) LVN_GETDISPINFO: I don't understand how this could help me?
3)Even when I use this, it still blinks (as it redraws each 3-4 secs).
The only solution I could think of is to ownerdraw, filter out the erase background etc messages and just manully draw the item I added.
I could even have the items preloaded and just change the images as they load (yes, these are thumbnails, but the pictures are big and therefore take so long to load). But numerous apps with thumbnails don't blink when changing or adding their items. Like XnView or Ulead Photo Explorer. Thanks again
|
|
|
|
|
I don't understand why it should flicker then. Can you describe whats happening in more detail? Like if it is a listview or listctrl, MFC what?
Drinking In The Sun
Forgot Password?
|
|
|
|
|
it's a WinApi application. I use a common controls listview control. The icons are 100x100 pixels. IMHO It flickers because I need to redraw it every while because I add an new item every while. I can send you the exe (92 kb) with the source if you want. But there's no "extra" stuff in it. Maybe the exe would show you the efect
|
|
|
|
|
|
when the timer elapses (when an image is loaded actually), this code takes place. It all is a part of the window proc. wParam is the number (array index) of the image to be added. hListBitmap is a initialized image list, hList is a window handle to the listview control, lpPictureList is my class for storing the images
//i tried this line to avoid the flickering, but it dosn't help
SendMessage(m_hList,WM_SETREDRAW,FALSE,0);
//i have and image list with the previous entries already set, so I just add the new one to it
ImageList_Add(hListBitmap, lpPictureList->GetPicture(wParam)->GetThumb(), NULL);
//I assign the image list to the listview
SendMessage(hList, LVM_SETIMAGELIST, (WPARAM)LVSIL_NORMAL, (LPARAM)hListBitmap);
//I add the new item
SendMessage(hList, LVM_SETITEMCOUNT, (WPARAM)1, (LPARAM)LVSICF_NOINVALIDATEALL | LVSICF_NOSCROLL);
LV_ITEM lvItem;
lvItem.mask = LVIF_TEXT | LVIF_IMAGE;
lvItem.pszText = lpPictureList->GetPicture(wParam)->GetFilename();
lvItem.iImage = wParam;
lvItem.iSubItem = 0;
lvItem.cchTextMax = 7;
lvItem.iItem = 0;
SendMessage(hList, LVM_INSERTITEM, 0, (LPARAM)&lvItem);
SendMessage(hList, LVM_SETITEMTEXT, 0, (LPARAM)&lvItem);
//the same as the first line
SendMessage(m_hList,WM_SETREDRAW,TRUE,0);
thanks in advance
|
|
|
|
|
c'mon guys, please give me some hints at least... I really can't find any soulution.
|
|
|
|
|
Not sure if i'm reading this right, but are you sending LVM_SETIMAGELIST and LVM_SETITEMCOUNT *each* time you add an item? This might have something to do with the flicker.
Otherwise, you *can* double buffer listviews, fairly easily as it turns out. Do a search on CP and in the C++ forum, this has come up before.
BTW: how bad of flicker are we talking about here? Optic-nerve-jerking, screen-tearing, unreadable flicker, or a minor blip?
- Shog9 - Aaah... It's time to relax. You know what that means: a glass of beer, your favorite ergo chair... And of course, The Code Project loaded on your Personal Computer System. So go on, and indulge yourself, put your feet up. Lean back and just enjoy the articles. After all, CP sooths even the savage
|
|
|
|
|
yes, I send them each time... How (except LVS_OWNDERDATA, if even), could I handle adding new image every time. I guess I have to set the image list each time.... IMHO this could actually eat a large portion o f cpu time, but has nothing to do with flickering because it the redraw itself doesn't take that long. It should be rexdrawn only once AFTER the image list is assigned. But correct me if I'm wrong
|
|
|
|
|
CaesarCZ wrote:
IMHO this could actually eat a large portion o f cpu time, but has nothing to do with flickering
I don't know that it does, just stabbing in the dark looking for odd things in your code (because of course, mine does not flicker ). Potentially, it could be causing flicker simply because the view would then think all the images have changed and it needs to redraw them.
Anyway, you *don't* have to set the image list each time you add an image to it. The handle doesn't change when you add an image, so the list already knows where to look; you just need to tell it the index of the image for the new item. The only reason i could think of that you would need to re-set the image list, would be if you were modifying all the existing images in it, as you would then need to inform the listview that they had changed. But in your case, it is unnecessary.
So, give it a try & see if that doesn't reduce flicker.
- Shog9 - Aaah... It's time to relax. You know what that means: a glass of beer, your favorite ergo chair... And of course, The Code Project loaded on your Personal Computer System. So go on, and indulge yourself, put your feet up. Lean back and just enjoy the articles. After all, CP sooths even the savage
|
|
|
|
|
I've been trying to make a very basic Inet program that posts data to a webpage. However, I can't get anything to work. I'm not sure if it is the program or the network I'm on. I'm on a shared internet connection through a switch. Here is what I have so far (excluding windows and error handling code)...
//======================================
HINTERNET h_open, h_connect, h_http;
static char agent[] = "Test Agent";
static char server[] = "http://userpages.umbc.edu";
static char action[] = "POST";
static char file[] = "/~kdvors1/cgi-bin/test.cgi";
static char data[] = "var1=test";
static char version[]= HTTP_VERSION;
DWORD type = INTERNET_OPEN_TYPE_PRECONFIG;
DWORD service = INTERNET_SERVICE_HTTP;
DWORD port = INTERNET_DEFAULT_HTTP_PORT;
BOOL result;
h_open = InternetOpen(agent,type,NULL,NULL,0);
h_connect = InternetConnect(h_open,server,port,NULL,NULL,service,0,NULL);
h_http = HttpOpenRequest(h_connect,action,file,version,NULL,NULL,0,NULL);
result = HttpSendRequest(h_http,NULL,NULL,data,strlen(data));
if(result)
{
MessageBox(NULL, "works", "", MB_OK);
}
InternetCloseHandle(h_http);
InternetCloseHandle(h_connect);
InternetCloseHandle(h_open);
//======================================
I even tried copying the example that msdn gave for using GET. That didn't work either, so that led me to believe that it was my network. If anyone could tell me how to make this work for a shared connection or how to fix it if something is wrong I would be very greatful.
Thanks in advance
-Firecow
|
|
|
|
|
You could use URLDownloadFileToCache()
const char* url = "http://userpages.umbc.edu/~kdvors1/cgi-bin/test.cgi?var1=test";
char tmp[MAX_PATH*2] = {0};
HRESULT hr = URLDownloadToCacheFile(NULL, url, tmp, sizeof(tmp), 0, NULL);
Todd Smith
|
|
|
|
|
Thank you for responding but I need to "POST" the data.
|
|
|
|
|
if you connect internet through a local network, your code won't work. you must specifiy a proxy as 3rd arg of InternetOpen()
|
|
|
|
|
Currently I use the MFC for all my programs, but I don't like the large library and the solid framework that comes along with it. So I thought I wanted to get rid of it, and thus I looked at plain Win32.
But as almost all my programs are heavily dependant of their GUI, programming in Win32 will be unnecessary cumbersome and repetative.
So I figured I do want some (light) framework to work with...
WTL looks very promising, but as microsoft doesn't officially support it, and because there is no documentation on it whatsoever I don't think it's an alternative either.
ATL and COM are (as far as I know) mainly for developing controls and such. I don't get the idea it's any good for designing functional user interfaces.
So... what should I do? Learn WTL despite the lack of documentation? Start with win32 (Pretzolts book - thanks guys) and build everything from scratch? Or should I give ATL a try? Or maybe there are other alternatives?
I hope somebody can shed light on this!
Thanks a lot in advance
Best regards,
Griffith
|
|
|
|
|
Griffith Sutherns wrote:
Learn WTL despite the lack of documentation?
That's what I've done. The method names in the GUI classes and control wrappers are almost identical to MFC's, so you can use the MFC docs for those, along with the gool ol' F12 key if you need to look up a particular method.
--Mike--
Just released - RightClick-Encrypt v1.3 - Adds fast & easy file encryption to Explorer
My really out-of-date homepage
Sonork-100.19012 Acid_Helm
|
|
|
|
|
Heh, but you're pretty professional and I am but an amateur.
I do like the -feel- of WTL, but is there any background knowledge neccecary to learn it? COM? ATL maybe?
"WTL is code that was released unsupported and we have no intention of updating it. We have no intention of continuing its availability. Frankly, it should never have been released and it will be removed from the platform SDK at the time of the next SDK revision." Bill Dunlap, Microsoft's Visual Studio 7 Lead Product Manager
This also bothers me...
Futhermore, there are but a few WTL articles here on CP. Are you sure it's the way to go?
Everything you say will be misquoted, ripped out of context and used against you. - Wise words indeed.
|
|
|
|
|
Griffith Sutherns wrote:
"WTL is code that was released unsupported and we have no intention of updating it. We have no intention of continuing its availability. Frankly, it should never have been released and it will be removed from the platform SDK at the time of the next SDK revision." Bill Dunlap, Microsoft's Visual Studio 7 Lead Product Manager
This also bothers me...
And dont remember the story behind that quote, but it
cirkulated here a while ago.
Anyway, it was just crap and you shouldn't be concerned with it.
/
- Don't sweat the petty things, and don't pet the sweaty things.
|
|
|
|
|
Well, the fact that WTL got a major rev a few weeks ago puts Dunlap's statement down.
WTL is not built on COM. It is built on the ATL windowing classes, so you need to know how those work. Here's a quick lesson:
CWindow: wraps an HWND
CWindowImpl<>: implements message handling
There you go The message map macros and handlers are slightly different, but all that is documented. Check out my hotfix checker for a full-fledged app that uses WTL.
--Mike--
Just released - RightClick-Encrypt v1.3 - Adds fast & easy file encryption to Explorer
My really out-of-date homepage
Sonork-100.19012 Acid_Helm
|
|
|
|
|
It does sound very promising, I must admit.
Are there any good books which cover the WTL basics? And should I learn something about ATL first, or isn't that required?
I'll check out your hotfix checker, but it won't work on a 98 system...
Griffith
Everything you say will be misquoted, ripped out of context and used against you.
|
|
|
|
|