C++ 错误的钢笔颜色
我尝试使用以下代码更改笔的颜色:C++ 错误的钢笔颜色,c++,visual-studio-2010,winapi,C++,Visual Studio 2010,Winapi,我尝试使用以下代码更改笔的颜色: redPen = CreatePen(PS_SOLID,1,0xFF0000); SelectObject(hdc, redPen); 但是它从黑色变成了蓝色。不管是什么颜色,因为如果我尝试设置新的颜色,笔总是蓝色的,如果我什么都不做,笔总是黑色的。 以下是完整的代码: #include "windows.h" int N=50; int M=30; int X=25; int width=X * N; int height=X * M; LRESUL
redPen = CreatePen(PS_SOLID,1,0xFF0000);
SelectObject(hdc, redPen);
但是它从黑色变成了蓝色。不管是什么颜色,因为如果我尝试设置新的颜色,笔总是蓝色的,如果我什么都不做,笔总是黑色的。以下是完整的代码:
#include "windows.h"
int N=50;
int M=30;
int X=25;
int width=X * N;
int height=X * M;
LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
int WINAPI WinMain(HINSTANCE h,HINSTANCE hprevinstance,LPSTR lpcmdline,int ncmdshow){
WNDCLASSEX wc;
HWND hwnd;
MSG msg;
ZeroMemory(&msg,sizeof(MSG));
wc.cbSize=sizeof(wc);
wc.style=CS_OWNDC|CS_HREDRAW|CS_VREDRAW;
wc.lpfnWndProc=WndProc;
wc.cbClsExtra=0;
wc.cbWndExtra=0;
wc.hInstance=h;
wc.hIcon=LoadIcon(NULL,IDI_APPLICATION);
wc.hCursor=LoadCursor(h,IDC_ARROW);
wc.hbrBackground=(HBRUSH)GetStockObject(GRAY_BRUSH);
wc.lpszMenuName=NULL;
wc.lpszClassName="main";
wc.hIconSm=LoadIcon(NULL,IDI_APPLICATION);
if(!RegisterClassEx(&wc)) return 0;
if(!(hwnd=CreateWindowEx(NULL,"main","test",WS_OVERLAPPEDWINDOW|WS_VISIBLE,0,0,width,height,NULL,NULL,h,NULL))) return 0;
ShowWindow(hwnd,SW_SHOWDEFAULT);
UpdateWindow(hwnd);
while(msg.message != WM_QUIT){
if(PeekMessage(&msg,NULL,0,0,PM_REMOVE)){
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
return msg.wParam;
}
LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam){
HDC hdc;
PAINTSTRUCT ps;
HPEN redPen;
switch (message){
case WM_PAINT:
hdc = BeginPaint(hwnd, &ps);
redPen = CreatePen(PS_SOLID,1,0xFF0000);
SelectObject(hdc, redPen);
for(int i=0;i<width;i+=X){
MoveToEx(hdc,i,0,NULL);
LineTo(hdc,i,height);
}
for(int j=0;j<height;j+=X){
MoveToEx(hdc,0,j,NULL);
LineTo(hdc,width,j);
}
EndPaint(hwnd, &ps);
return 0;
case WM_DESTROY:
PostQuitMessage(0);
return 0;
}
return DefWindowProc(hwnd, message, wParam, lParam);
}
#包括“windows.h”
int N=50;
int M=30;
int X=25;
整数宽度=X*N;
内部高度=X*M;
LRESULT回调WndProc(HWND、UINT、WPARAM、LPARAM);
int WINAPI WinMain(HINSTANCE h、HINSTANCE hprevinstance、LPSTR lpcmdline、int ncmdshow){
WNDCLASSEX wc;
HWND-HWND;
味精;
零内存(&msg,sizeof(msg));
wc.cbSize=sizeof(wc);
wc.style=CS_OWNDC | CS_HREDRAW | CS_VREDRAW;
wc.lpfnWndProc=WndProc;
wc.cbClsExtra=0;
wc.cbWndExtra=0;
wc.hInstance=h;
wc.hIcon=LoadIcon(空,IDI_应用程序);
wc.hCursor=加载光标(h,IDC_箭头);
hbrBackground=(HBRUSH)GetStockObject(灰色画笔);
wc.lpszMenuName=NULL;
wc.lpszClassName=“main”;
wc.hIconSm=LoadIcon(空,IDI_应用程序);
如果(!RegisterClassEx(&wc))返回0;
如果(!(hwnd=CreateWindowEx(NULL,“main”,“test”,WS|u重叠窗口| WS|u可见,0,0,宽度,高度,NULL,NULL,NULL,h,NULL))返回0;
显示窗口(hwnd、SW_显示默认值);
更新窗口(hwnd);
while(msg.message!=WM_退出){
如果(PeekMessage(&msg,NULL,0,0,PM_REMOVE)){
翻译信息(&msg);
发送消息(&msg);
}
}
返回msg.wParam;
}
LRESULT回调WndProc(HWND HWND,UINT消息,WPARAM WPARAM,LPARAM LPARAM){
HDC-HDC;
PAINTSTRUCT-ps;
HPEN红笔;
开关(信息){
案例WM_油漆:
hdc=开始喷漆(hwnd和ps);
redPen=CreatePen(PS_实体,1,0xFF0000);
选择对象(hdc、红色笔);
对于(int i=0;i
不,这肯定是错误的标识符名称,它应该是“bluePen”。COLORREF以十六进制编码为0x00bbggrr。因此0x00ff0000是蓝色的,而不是红色的
改为使用RGB宏将陷入成功的陷阱:
redPen = CreatePen(PS_SOLID, 1, RGB(0xFF, 0, 0));
很抱歉这么说,但这真的是一个很好的例子。
redPen = CreatePen(PS_SOLID, 1, RGB(0xFF, 0, 0));