|
No, it never gets WM_TOUCH. But see my update and solution.
|
|
|
|
|
Hi,
Richard MacCutchan wrote: I divide the zDelta value by 120 (WHEEL_DELTA) to calculate the (approximate) number of lines to scroll.
While it is true that the many of the old mouse drivers sent WHEEL_DELTA in multiples of 120 that is not always the case for high-precision mice and touchpads.
You are probably getting values much smaller than 120. To fix your code you need to keep track of the delta modulo of +/- 120 in a static local or class variable and add/subtract the latest delta from the previous value.
I also observe that you are hard-coding the line count rather than retrieving the user preference via SystemParametersInfo with SPI_GETWHEELSCROLLLINES.
Best Wishes,
-David Delaune
|
|
|
|
|
Randor wrote: you need to keep track of the delta Thanks David, that works perfectly - simple when you know how. As to the fixed value, this is purely for personal use so I am not too concerned with system settings; although I notice that 3 is the default value.
|
|
|
|
|
Richard MacCutchan wrote: Thanks David, that works perfectly
Looks good, although I do see a minor issue with your latest code.
You are dropping the remainder without the modulo operation. Rather than setting your delta to zero you should keep the remainder after scrolling with:
myDelta = myDelta % WHEEL_DELTA;
Such a precision loss is probably not a big deal for simply scrolling a text window. But let's make our code samples more correct.
Best Wishes,
-David Delaune
|
|
|
|
|
Thanks again, I will certainly update my code (and the original question).
|
|
|
|
|
Hi all!
I want to build a program to manage other processes. The program is responsible for any process that suddenly stops and the program will call back that process. I am wondering how to use CreateEvent() to create a global event variable to manage it. I hope you give me advice and methods to solve that problem.
Thank you!
|
|
|
|
|
|
It is true that the program I will develop should be a service. Do you have experience with this issue please share with me. thank you very much!
|
|
|
|
|
Here is but one of many examples.
"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
|
|
|
|
|
Well, it was more than six years back... I used the NSSM - the Non-Sucking Service Manager
The most important thing is you could used the original UI application to use with..., however, in "service" mode you must forbid all UI features.
|
|
|
|
|
I'm trying to change a given string in a function, but I send a string, try to change it directly and get a core dump, so I tried to create a string in the function, but it doesn't send the correct string.
This function must eliminate all Capital letter's it's a simple one, but I am making a mistake and don't see where.
Can any one help me please.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#define false 1
#define true 0
char* my_strdelupper(char* s){
int i,j, len;
char aux[100];
char debuging;
len = strlen(s);
j = 0;
for (i = 0; *(s + i) != '\0' < len; i++){
if (!isupper(*(s+i))){
printf("%c",*(s+i));
debuging = *(s + i);
*(aux + j) = debuging;
j++;
}
}
*(aux + j) = '\0';
printf("\n");
puts(aux);
return strcpy(aux, aux);
}
int main()
{
char *s3="Quem quer casar com um programador?";
printf("%s\n",my_strdelupper(s3));
return 0;
}
|
|
|
|
|
Why not using the std::string with all its and other std methods?
|
|
|
|
|
|
You have: char *s3 = "..." . Although s3 is declared as char * the type of the string is const char * . Use char s3[] = "..." instead.
|
|
|
|
|
|
If I were to hazard a guess, I'd say it has to do with aux being destroyed (i.e., going out of scope) once my_strdelupper() returns.
"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
|
|
|
|
|
I think you are correct, but I tried to copy aux to s and didn't work, now I changed the code to send an array, them befour I leave I copy using srtcpy aux to s, and it's working.
|
|
|
|
|
This line of code puzzles me:
*(s + i) != '\0' < len It probably should be:
i < len
A second problem is that you are doing the copy only on !isupper, when you should be doing it always as soon as an uppercase character is detected.
A third problem is the strcpy() at the end. It's pointless.
A fourth problem is that you are returning a pointer to the a stack value which becomes invalid because the call to printf is likely overwriting it and is likely causing a fault.
modified 8-Jun-19 1:10am.
|
|
|
|
|
You are correct, that was one mistake, but it should be *(s + i) != '\0' because I am searching for the end of line.
|
|
|
|
|
Try this:
char* my_strdelupper(char* s){
int i, len;
char* sl;
len = strlen(s);
sl = (char*)malloc(len+1); i = 0; while (*s != '\0'){
if (!isupper(*s)){
sl[i++] = *s; }
s++;
}
sl[i] = '\0';
printf("%s\n", sl);
return sl;
}
|
|
|
|
|
The stupid thing is that I can't use malloc, so I made a char array with fixed size to overcame that problem.
|
|
|
|
|
Thank you, for all, it was a great help.
The problem was solved by:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#define false 1
#define true 0
char* my_strdelupper(char* s){
int i,j, len;
char aux[100];
char debuging;
len = strlen(s);
j = 0;
for (i = 0; *(s + i) != '\0'; i++){
if (!isupper(*(s+i))){
debuging = *(s + i);
*(aux + j) = debuging;
j++;
}
}
*(aux + j) = '\0';
strcpy(s, aux);
return s;
}
int main()
{
char s3[]="Maria, TU sabes que TU éS o meu \"Grande Amor\"";
printf("%s\n",my_strdelupper(&s3[0]));
return 0;
}
|
|
|
|
|
As a note - you define 'len' but you don't use it.
Presumably the assignment does not say otherwise, using that would make your code simpler.
|
|
|
|
|
Note you don't need extra storage, the function may change the string in place:
char * remove_upper( char * s)
{
char * p, *q;
for (p = q = s; *p != '\0'; ++p)
if ( ! isupper(*p) )
*q++ = *p;
*q = '\0';
return s;
}
|
|
|
|
|
Taken from K&R 1st ed? Certainly has that feel>
Software rusts. Simon Stephenson, ca 1994. So does this signature. me, 2012
|
|
|
|