哪个是优选的,方法1或方法2?
LRESULT CALLBACK wpMainWindow(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam)
{
switch (msg)
{
case WM_PAINT:
{
HDC hdc;
PAINTSTRUCT ps;
RECT rc;
GetClientRect(hwnd, &rc);
hdc = BeginPaint(hwnd, &ps);
// drawing here
EndPaint(hwnd, &ps);
break;
}
default:
return DefWindowProc(hwnd, msg, wparam, lparam);
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
LRESULT CALLBACK wpMainWindow(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam)
{
HDC hdc;
PAINTSTRUCT ps;
RECT rc;
switch (msg)
{
case WM_PAINT:
GetClientRect(hwnd, &rc);
hdc = BeginPaint(hwnd, &ps);
// drawing here …Run Code Online (Sandbox Code Playgroud) 我没有使用对话框,我正在使用我已经注册的自定义类,然后使用该CreateWindow调用来创建它,我在注册时将背景颜色预设为红色:
WNDCLASSEX wc;
wc.hbrBackground = CreateSolidBrush(RGB(255, 0, 0));
Run Code Online (Sandbox Code Playgroud)
但现在我想在运行时更改背景颜色,例如单击按钮将其更改为蓝色.
我曾尝试使用SetBkColor()call WM_PAINT,并尝试从WM_CTLCOLORDLG消息中返回一个画笔,它们不起作用.
有帮助吗?
在我有用的热键程序中,我有一个全局热键,通过调用将当前前景窗口设置为Topmost/Not topmost
SetWindowPos(hwnd, HWND_TOPMOST,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE);
SetWindowPos(hwnd, HWND_NOTOPMOST,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE);
Run Code Online (Sandbox Code Playgroud)
目前我必须有两个单独的热键,Win + Z将窗口设置为TOPMOST anjd Win + X将窗口设置为NOTOPMOST.
我在MSDN中找不到一个能让你检查windows z顺序的函数..我希望像GetWindowOrder这样的东西,但是没有.我也尝试检查windows ex标志,如下所示:
dwExStyles & WS_EX_TOPMOST
Run Code Online (Sandbox Code Playgroud)
但似乎标志永远不会改变,它只是告诉窗口在第一次创建时将自己设置为最顶层.
有功能来检查这个吗?
我想创建自己的类来处理创建窗口和窗口过程,但我注意到窗口过程必须是静态的!我现在想知道是否有可能使窗口过程面向对象?我已经阅读了一些关于面向对象窗口的教程,但是它们总是让程序变得静态 - 这是什么用的?:/
任何关于如何解决这个问题的链接或信息将不胜感激,
谢谢
在这个例子中,即使我永远不会使用变量WNDCLASSEX,x,y,cx,cy,当我在消息循环中时,它们仍将使用内存:
int WINAPI WinMain (HINSTANCE hInst, HINSTANCE hPrev, LPSTR lpArgs, int iCmdShow)
{
WNDCLASSEX wc;
...
RegisterClassEx(&wc);
const int cx = 640;
const int cy = 480;
// center of the screen
int x = (GetSystemMetrics(SM_CXSCREEN) - cx) / 2;
int y = (GetSystemMetrics(SM_CXSCREEN) - cy) / 2;
CreateWindow(..., x, y, cx, cy, ...);
MSG msg;
while (GetMessage(&msg, NULL, 0, 0) > 0)
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
但我想知道,如果我把它们放在一个范围内,它们仍会在消息循环中使用内存吗?例如
int WINAPI WinMain (HINSTANCE hInst, HINSTANCE hPrev, LPSTR lpArgs, …Run Code Online (Sandbox Code Playgroud) public byte[][,] Shapes =
{
{
{1,1},
{1,1}
},
{
{1},
{1},
{1},
{1}
},
{
{0,0,1},
{1,1,1}
}
};
Run Code Online (Sandbox Code Playgroud)
我收到此错误:"数组初始化程序只能在变量或字段初始化程序中使用.请尝试使用新表达式."
我能做到这一点......
public class Shape
{
public byte[][,] Shapes;
public Shape()
{
Shapes = new byte[3][,];
Shapes[0] = new byte[2, 2];
Shapes[0][0, 0] = 1;
Shapes[0][0, 1] = 1;
Shapes[0][1, 0] = 1;
Shapes[0][1, 1] = 1;
Shapes[1] = new byte[1, 4];
Shapes[1][0, 0] = 1;
Shapes[1][0, 1] = 1;
Shapes[1][0, 2] = 1;
Shapes[1][0, 3] = 1;
}
} …Run Code Online (Sandbox Code Playgroud) 当我选择开始使用控制台项目时,它允许您选择C或C++.但是一旦创建,我无法弄清楚如何改变它.另外,当您创建Win32 GUI应用程序时,它根本不提供选项,其默认值为C++.
我在哪里可以换成C?我一直在寻找所有项目设置.从我的重命名文件.cpp到.c似乎并没有做任何事情,它编译文件作为C++.我知道没有IDE,你只需将可执行文件更改g++为gcc,但是如何为CodeBlocks中的当前项目设置它?
我的朋友正在学习挪威语,我想创建一个全局热门密钥程序,它可以发送密钥等
æ
ø
å
Run Code Online (Sandbox Code Playgroud)
我的问题是keybd_event函数不允许我发送这些密钥,我似乎只限于虚拟密钥代码是否有我可以使用的其他功能或发送它们的一些技巧?
在MSDN上,对于WM_KEYDOWN定义,它说lparam的位包含:
Bits Meaning
0-15 The repeat count for the current message. The value is the number of times the keystroke is autorepeated as a result of the user holding down the key. If the keystroke is held long enough, multiple messages are sent. However, the repeat count is not cumulative.
16-23 The scan code. The value depends on the OEM.
24 Indicates whether the key is an extended key, such as the right-hand ALT and CTRL keys that appear on …Run Code Online (Sandbox Code Playgroud)