|
That is because SS_OWNERDRAW is not a bit value that can be O-red to the style but a masked value.
Use
SetWindowLong(GetSafeHwnd(),GWL_STYLE,( dwStyle & ~SS_TYPEMASK) | SS_OWNERDRAW); instead.
Or better:
ModifyStyle(SS_TYPEMASK, SS_OWNERDRAW));
|
|
|
|
|
Hello all. I am trying to re-use a file pointer at the start of the program and then close this when program is shutting down, after some work with it. So far I have come up with this
globals.h
=========
extern FILE* ptrLogFile;
file1.c
=======
#include "globals.h"
FILE* ptrLogFile = fopen("RequestsLog.log", "a+");
file2.c
========
#include "globals.h"
FILE* ptrLogFile = fopen("RequestsLog.log", "a+");
file3.c
========
#include "globals.h"
fclose(ptrLogFile);
But this is not what I am looking for. I want to initialize, using fopen() , the ptrLogFile just once (may be in globals.h ?) and then re-use it in file1.c and file2.c as long as I want. Finally close it in file3.c when the program is shutting down. How do I do this? Thanks
modified 9-May-17 9:17am.
|
|
|
|
|
You have to define and initialise the global variable within one source file:
FILE* ptrLogFile = NULL;
Then use it anywhere this way:
#include "globals.h"
if (NULL == ptrLogFile)
ptrLogFile = fopen("RequestsLog.log", "a+");
#include "globals.h"
if (NULL == ptrLogFile)
ptrLogFile = fopen("RequestsLog.log", "a+");
#include "globals.h"
if (NULL != ptrLogFile)
{
fclose(ptrLogFile);
ptrLogFile = NULL;
}
|
|
|
|
|
Thanks. I got it working. But the log file is not getting updated until I close my program. How do I update the log file even when the program is running?
|
|
|
|
|
Call fflush[^] after writing to the stream.
|
|
|
|
|
Don't do it that way. Create a function or library module that does all the work and then just call the actual logging functions anywhere in your code. Call the initialiser, to open the file, at the beginning of your main module, and the closing operation just before your main program terminates.
|
|
|
|
|
Here's how I deal with global variables. I have one header file, I call Globals.h, with these definitions :
#ifdef DEFINE_GLOBALS
#define Global
#define GlobalVar(Type,Variable,Value) Type Variable=Value
#else
#define Global extern
#define GlobalVar(Type,Variable,Value) extern Type Variable
#endif
Then, in one and ONLY one file do this :
#define DEFINE_GLOBALS
#include "include "Globals.h"
#endif
before I include headers that define variables.
Here are some sample definitions :
typedef FILE * PFILE;
GlobalVar( PFILE, PtrLogFile, NULL );
GlobalVar( size_t, LineCount, 0 );
|
|
|
|
|
Hi
basically my problem is how to get rid of flickering when i use customdraw.
I know about double bufering, bckgnderase and any other solutions, but all of them do not work in my case, because my customdraw is called for each item (when resizing window(mfc behavior)) and for some of them when multiselection happens. CustomDraw is called from OnNotify(need that because i am extending normal tree with columns like in listView - so it look smth like Grid with expandable rows).
Cause of all that behavior that i need, got no idea how to apply double buffering into this, cause there's none notification when to bitblt offscreen bitmap into screen.
Would appreciate any ideas.
|
|
|
|
|
|
Richard MacCutchan wrote: See WM_SETREDRAW message (Windows)[^].
Same problem like with bitblt there's no proper place to call that one. MFC calls NM_CUSTOMDRAW for each element. So i've got no control over this "message loop".
|
|
|
|
|
|
|
Actually using this one as base. Anyway thx for reply.
|
|
|
|
|
There double buffering technique that is fairly trivial to implement and gives reasonable results for any complex drawing
1.) Your draw routines only draw on a memory context, don't draw to the screen at all in those item draw calls.
2.) You use a standard windows timer which will timeout after a set time and you use that to update the screen.
3.) Anytime you draw to the memory context in step 1 you kill the running any timer and restart it
4.) The timer running out posts off a message and if you use that message to transfer the memory DC to screen, you then dispose of the timer.
You should be able to get what happens that each item simply draws itself to the memory DC and will restart the timer. When the last item has been drawn the timer will finally hit it's wait timeout and post off the message which will draw all the items together as one big bitblt draw and no flickering.
The requirements 1 memory context (created when window is created), 1 timer which is created and disposed as per above.
In vino veritas
|
|
|
|
|
Very interesting idea, will check it now and tell if it work's for me. Thanks.
|
|
|
|
|
So i've found answer to my problem. I think that i got best working solution that's : Fast, easy and makes ALL flickering dissapear.
So the trick is to set Ctrl's window Exstyle WS_EX_COMPOSITED and the same time handle ON_WM_ERASEBKGND() (just return true or false doesn't metter from what i've observed) and that do the trick.
|
|
|
|
|
You should return true (being a non zero value) otherwise window will remain marked for erasing which somewhere down the track may come back to bite you. Remember the API underworkings aren't fixed you may find an old version of Windows or a new update which decides to use the flag.
In vino veritas
|
|
|
|
|
In client application I created Private sensor pool using msdn demo code.
and using that code I'm able to open session enroll fingerprints.
But the problems are
1. When tried to enroll same fingerprint again then it causes to stop WbioSrvc so I need to restart my application again.
2. similar thing happening while identifying when trying to identify with random finger function working fine it is returning unknown identity. But when trying to saved fingerprint instead of identifying it is causing to stop WbioSrvc.
In this case what can I do?
I used code same as msdn provided
here is the code what I tried
Code is Here
|
|
|
|
|
i have same function in both parent classes in multiple inheritance like show(); when i m am call function show(); compiler generate an error what is the solution of this problem
|
|
|
|
|
Member 13159920 wrote: what is the solution of this problem The solution is to correct your code. We cannot guess what you have written.
|
|
|
|
|
You have to specify which show() function has to be called:
derived.ParentClass1::show();
derived.ParentClass2::show(); You may also put this code into a new member function using a different name like showBoth() or add functions for each:
class derived : public ParentClass1, ParentClass2
{
void show1() { ParentClass1::show(); }
void show2() { ParentClass2::show(); }
void showBoth() { ParentClass1::show(); ParentClass2::show(); }
};
|
|
|
|
|
I have tried using Selenium with both the PythonQt and the Python.h libraries. I have a Ubuntu 16.04 platform using QT Creator 4.2.2 with Qt5.8.0. I can get everything setup with either interpreter and call a simple Python class for strings from Qt. However when I try and use Selenium I end up having problems (running py script for Selenium from the prompt works fine). For instance, using python.h When PyObject_GetAttrString(pModule, "browser") is called I get a segmentation fault. I am assuming that I need to load the selenium module or set the python path to it in Qt, but I am not clear on how to do this with multiple modules/paths. This is my python code browser.py:
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
class browser():
def __init__(self):
self.driver = None
self.webelement = None
def getbrowser(self, name):
if name == "chrome":
self.driver = webdriver.Chrome()
elif name == "firefox":
self.driver = webdriver.Firefox()
def getpage(self,page):
self.driver.get(page)
def getsearchelement(self,elementname):
self.webelement = self.driver.find_element_by_name(elementname)
def getsearch(self,search):
self.webelement.send_keys(search + Keys.RETURN)
def stopbrowser(self):
self.driver.quit()
""" Following runs fine from prompt, crashes in PythonQt/python.h
browser = webdriver.Firefox()
browser.get('https:\\search.yahoo.com')
elem = browser.find_element_by_name('p') # Find the search box
elem.send_keys('seleniumhq' + Keys.RETURN)
browser.quit()
"""
Here is the routine from my c++ code
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow)
{
ui->setupUi(this);
PyObject *pName, *pModule, *pFuncSet, *pValue, *pClass, *pInst, *pArgs;
PyObject *pGetBrowser, *pGetPage, *pGetSearchElement, *pGetSearch, *pStopBrowser;
Py_Initialize();
PySys_SetPath("/home/user/CppCode/StocksWeb/src/");
pName = PyString_FromString("browser");
pModule = PyImport_ImportModule("browser");
pClass = PyObject_GetAttrString(pModule, "browser");
if(pClass != NULL && pModule != NULL ) {
pArgs = Py_BuildValue("( )");
pInst = PyEval_CallObject(pClass, pArgs);
if ( pInst != NULL ) {
pGetBrowser = PyObject_GetAttrString(pInst, "getbrowser");
pGetPage = PyObject_GetAttrString(pInst, "getpage");
pGetSearchElement = PyObject_GetAttrString(pInst, "getsearchelement");
pGetSearch = PyObject_GetAttrString(pInst, "getsearch");
pStopBrowser = PyObject_GetAttrString(pInst, "stopbrowser");
if( PyCallable_Check(pGetBrowser) && PyCallable_Check(pGetPage) && PyCallable_Check(pGetSearchElement) && \
PyCallable_Check(pGetSearch) && PyCallable_Check(pStopBrowser) ) {
pArgs = Py_BuildValue("(s)","firefox");
PyObject_CallObject(pGetBrowser, pArgs);
pArgs = Py_BuildValue("(s)","https:\\search.yahoo.com");
PyObject_CallObject(pGetPage, pArgs);
pArgs = Py_BuildValue("(s)","p");
PyObject_CallObject(pGetSearchElement, pArgs);
pArgs = Py_BuildValue("(s)","seleniumhq");
PyObject_CallObject(pGetSearch, pArgs);
PyObject_CallObject(pStopBrowser, NULL);
}
}
}
Py_DECREF(pModule);
Py_DECREF(pName);
Py_Finalize();
}
Any help would be greatly appreciated!
modified 28-Apr-17 23:16pm.
|
|
|
|
|
Hello i'm a student please i would like to have source file of the scientific computer on visual studio
Thanks
|
|
|
|
|
Do you mean scientific calculator? If so, take a look here. How To Implement a Scientific Calculator in C++[^]
"the debugger doesn't tell me anything because this code compiles just fine" - random QA comment
"Facebook is where you tell lies to your friends. Twitter is where you tell the truth to strangers." - chriselst
"I don't drink any more... then again, I don't drink any less." - Mike Mullikins uncle
|
|
|
|
|
Member 13159496 wrote: ...scientific computer on visual studio... What in the world is that?
"One man's wage rise is another man's price increase." - Harold Wilson
"Fireproof doesn't mean the fire will never come. It means when the fire comes that you will be able to withstand it." - Michael Simmons
"You can easily judge the character of a man by how he treats those who can do nothing for him." - James D. Miles
|
|
|
|