Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/136.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 错误的钢笔颜色_C++_Visual Studio 2010_Winapi - Fatal编程技术网

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));