|
Just an idea here...
Perhaps the StrechDIBits is internally limiting itself to the coordinates of the initial device resolution?
Instead, maybe you can try this...
Create a memory DC the size of the combined monitors.
Perform the StrechDIBits into the memory DC
Copy the memoy DC image to the 'virtual' DC of the combined monitors.
|
|
|
|
|
Great idea, we already do this code for double buffered screen drawing code. I have already tried to modify this. But we still get the same problem. I am also trying to use the good old MFC Sample DIBLook and this also suffers the same problem.
"Create a memory DC the size of the combined monitors"
Do you mean a CreateCompatibleDC(pDC)?
|
|
|
|
|
Yes, and I reiterate this is what I would 'try' since I have not solved this problem before either..
A memory DC exists only in memory. When the memory DC is created, its display surface is exactly one monochrome pixel wide and one monochrome pixel high. Before an application can use a memory DC for drawing operations, it must select a bitmap of the correct width and height into the DC. To select a bitmap into a DC, use the CreateCompatibleBitmap function, specifying the height, width, and color organization required.
You might need to CreateCompatibleDC() then CreateCompatibleBitmap() (this bitmap is just to force the compatible DC into the correct color depth and dimensions). Then perform your StretchDIBits into the 'compatible' DC. If you are lucky follow all that with a single copy operation of this compatible DC to one representing the entire 'screen' (across the two monitors), otherwise, you will need two copy operations, one targeting the DC of each monitor.
|
|
|
|
|
We already use this method for flicker free screen rendering (double buffering). We did not use the double buffering for printer DC. I have now tried this double buffering for a print preview DC and the problem still exists.
Looks like a Microsoft bug report time.
Thanks for you thoughts
|
|
|
|
|
How can i change the color of the title bar of my dialog/sdi/mdi. I dont want to use a seperate class for this purpose.
|
|
|
|
|
Hello Wasif
As far as i know color of the title bar of any window is decided by the currently applied theme or selected color in the "Appearence" Tab of "Display properties" System dialog.
i guess by some way or other if you could get that system Dialog and change these settings programatically but doing this will change title color of all windows. or you could also try to search about HTHEME in MSDN
any ways i hope u will get some clue from this message and will start thinking in a different direction.
All the best
Muhammad Azam
1st Semester M.Engg
NED UET
|
|
|
|
|
As mentioned by Muhammed, the Title bar colour is determined by
your current colour scheme. If you want to create your own unique title bar window, you probably have to handle the drawing yourself.
This would probably involve handing
the WM_NCPAINT message. I don't think there is any lightweight solution to your request, but if you still want to pursue that idea, there are a few articles on CP about creating custom windows title bars.
I Dream of Absolute Zero
|
|
|
|
|
|
Hi, all
I'm adding items to the list control:
for (i = 0; i < pDoc->GetSize(); i++)
{
LV_ITEM lvi;
CMovieData* pMovie = pDoc->GetMovie (i);
lvi.mask = LVIF_TEXT | LVIF_PARAM;
lvi.iItem = i;
lvi.iSubItem = 0;
lvi.pszText = new TCHAR[]; // this line is 63
_tcscpy (lvi.pszText, pMovie->Name);
movList.InsertItem (&lvi);
lvi.mask = LVIF_TEXT;
lvi.iImage = i;
lvi.iSubItem = 1;
_tcscpy (lvi.pszText, pMovie->GetGenre());
movList.SetItem (&lvi);
}
After program stopping I get a message:
Detected memory leaks!
Dumping objects ->
d:\temp\projects\movies\moviesview.cpp(63) : {334} normal block at 0x00376190, 0 bytes long.
Data: <>
d:\temp\projects\movies\moviesview.cpp(63) : {333} normal block at 0x00379DD0, 0 bytes long.
Data: <>
{90} normal block at 0x00372D10, 24 bytes long.
Data: < 2| > D8 9C 32 7C 07 00 00 00 07 00 00 00 01 00 00 00
d:\temp\projects\movies\moviesdoc.cpp(44) : {87} normal block at 0x00372848, 4 bytes long.
Data: < -7 > 20 2D 37 00
Object dump complete.
The 63 line I've marked. Is it possible to delete in some way the strings? Thanks.
|
|
|
|
|
The pszText variable only requires the pointer to your displayed string. Because you are already storing the textual information in your document, you only need to set this variable to your string array.
Try this:
for (i = 0; i < pDoc->GetSize(); i++)
{
CMovieData* pMovie = pDoc->GetMovie(i);
LV_ITEM lvi;
lvi.mask = LVIF_TEXT | LVIF_PARAM;
lvi.iItem = i;
lvi.iSubItem = 0;
<font color=red> lvi.pszText = (LPCTSTR)pMovie->Name;</font>
lvi.iImage = i;
int pos = movList.InsertItem (&lvi);
movList.SetItem(pos, 1, (LPCTSTR)pMovie->GetGenre());
}
[EDIT]
This will eliminate the need to create unmanaged memory allocation which resulted in your memory leaks.
[/EDIT]
I Dream of Absolute Zero
|
|
|
|
|
for (i = 0; i < pDoc->GetSize(); i++)
{
CMovieData* pMovie = pDoc->GetMovie (i);
LV_ITEM lvi;
lvi.mask = LVIF_TEXT | LVIF_PARAM;
lvi.iItem = i;
lvi.iSubItem = 0;
lvi.pszText = (LPCTSTR) pMovie->Name;
//_tcscpy (lvi.pszText, pMovie->Name);
movList.InsertItem (&lvi);
}
d:\Temp\PROJECTS\Movies\MoviesView.cpp(63) : error C2440: '=' : cannot convert from 'ATL::CSimpleStringT::PCXSTR' to 'LPSTR'
with
[
BaseType=char,
t_bMFCDLL=true
]
Conversion loses qualifiers
|
|
|
|
|
In this case, you will need to get a pointer to the underlying string array.
One suggestion would be:
..
lvi.pszText = pMovie->Name.GetBuffer(0);
pMovie->Name.ReleaseBuffer();
..
I Dream of Absolute Zero
|
|
|
|
|
(LPTSTR) (LPCTSTR) pMovie ->Name
That also works well to get around the limitations of the structure definition.
Tim Smith
I'm going to patent thought. I have yet to see any prior art.
|
|
|
|
|
how do i add arabic language in menu?
using vc++ 6.............
thanks ahead!
|
|
|
|
|
Just Enable UNICODE support in your application by using these macro
#ifndef UNICODE
#define UNICODE
#endif
these macro will enable the UNICODE SUPPORT In your application and with help of UNICODE charater set you can easily USE arabic in your APPLICATION .
"I Think this Will Help"
[Vote One Here,.....]
<h5
alok gupta="" <br=""> visit me at http://www.thisisalok.tk
|
|
|
|
|
I`m building a MDI application. I couldn`t iterate through the views. I use :
POSITION pos = CFileManDoc::GetFirstViewPosition();<br />
while (pos != NULL)<br />
{<br />
CFileManView* pView = (CFileManView*) CFileManDoc::GetNextView(pos);<br />
ASSERT_VALID(pView);<br />
pView->GetWindowText(strText);<br />
AfxMessageBox(strText);<br />
}
It only went to the active view. Any idea?
<italic>Work hard and a bit of luck is the key to success. You don`t need to be genius, to be rich.
|
|
|
|
|
Is it possible that an app is called MDI because it is a multiple DOCUMENT Interface
However, I think that each of your documents only has one view associated with it, unless you are certain you opened up multiple VIEWS on each document.
You need nested loops to get all views in the program...
Firstly, use CWinApp::GetFirstDocTemplatePosition to get first document template position in the program, and iterate each of the found document templates.
Secondly, use CDocTemplate::GetFirstDocPosition to get first document of the currently iterated document template, and iterate all the documents associated with the currently iterated doeument template.
Thirdly, use CDocument::GetFirstViewPosition to begin iteration of each view associated with the currently iterated document.
In this way, you will get a pointer to each 'view' in your MDI program.
|
|
|
|
|
Blake Miller wrote:
unless you are certain you opened up multiple VIEWS on each document.
I`m certain. I really don`t know what went wrong.
<italic>Work hard and a bit of luck is the key to success. You don`t need to be genius, to be rich.
|
|
|
|
|
You will have to debug why your view is not in the view list for the document.
I would place a breakpoint where it is created and start single stepping through the code to figure this one out. There is a member of the document class, I think it is a simple list or array, that contains the views. Your view should have been in that list.
|
|
|
|
|
OK, I`ll try that. Thanks.
<italic>Work hard and a bit of luck is the key to success. You don`t need to be genius, to be rich.
|
|
|
|
|
Hi All,
What are the differences between ordinary variables, references and pointer variables?
I need a description in this area.
Hope someone will help me soon.
TIA,
Jahfer
|
|
|
|
|
|
How can I implement this?
So far I have:
using namespace std;
typedef std::vector<std::vector<unsigned char=""> > USBVECTOR;
// Declare a dynamically allocated vector of QuickUSB Devices
USBVECTOR aDeviceChannel;
// Iterator is used to loop through the vector.
USBVECTOR::iterator iDeviceIterator;
So how can I make aDeviceChannel into a typical 2d array? Then how can I write data to each index in the array (like array[i][j] = blah)
Thanks
|
|
|
|
|
Try this technique...
<pre>// Array of arrays of ints
typedef vector<vector<int> > CMultiIntArray;
void TraceDynamicArray(const unsigned int rows, const unsigned int columns)
{
CMultiIntArray aTest;
// Allocate number of rows
aTest.resize( rows );
// For each row
for (int row = 0; row < aTest.size(); row++)
{
// Allocate number of columns
aTest[row].resize( columns );
// For each column
for (int column = 0; column < aTest[row].size(); column++)
{
// Assign a value
aTest [row] [column] = 10 * row + column;
// Trace it
cout << aTest [row] [column] << "\t";
}
cout << "\n";
}
}
// Example usage: Standard C++ Library version
int main(int argc, char* argv[])
{
TraceDynamicArray(3,5);
return 0;
}</pre>
Kevin
|
|
|
|
|
How can i terminate/release file handles acquired by one process from some other process?
Thanks in Anticipation
|
|
|
|