I'm working on makin some sort of image editor that will resize bitmaps for me. I am currently drawing bitmaps to a "static" window just to make sure i'm loading the bitmaps correctly. So here comes a couple questions.

1) Is there a way to draw a bitmap to the screen all at once, instead of setting every pixel manually? This obviously takes some time when I'm dealing with images 1280x800 or higher. I found some stuff about HBITMAP but i'm not quite sure if that's what I'm in need of yet as I can't find a definite answer on its use. I think drawing the bitmap this way is also the reason why my CPU usage jumps to 50%+ so it has to be fixed.

2) The bmp loader I made works well for certain bitmap images. I've used it to load textures for opengl for quite a while and have never had a problem. But now that I'm throwing the image to a static screen, about 1 out of 3 images will end up being slanted with the colors screwed up. This never happened in opengl, and I have tested this on 3 computers and they all do the same thing. What gives?

Here is the code I'm using to draw the bitmap to the static screen, along with the example of the slanted bitmap.
Code:
        case WM_PAINT:
        {
            if(UpdateCanvasImage){
                UINT error;
                ///set up for displaying picture to the screen
                InvalidateRect(hCanvas, 0, true); //hCanvas is the static window
                PAINTSTRUCT ps;
                HDC winDC = BeginPaint(hCanvas, &ps);
                
                for(int y = 0; y < lParam; y++) {
                    for(unsigned int x = 0; x < wParam; x++) {     //g_Canvas is a class defining the bmp image
                        BYTE R = g_Canvas.GetPixel(x, y, PIXEL_R, error);
                        BYTE G = g_Canvas.GetPixel(x, y, PIXEL_G, error);
                        BYTE B = g_Canvas.GetPixel(x, y, PIXEL_B, error);
                        SetPixel(winDC, x, lParam - y, RGB(R, G, B));
                    }
                }
                EndPaint(hCanvas, &ps);
                ///End set up for displaying picture to screen
                
                PostMessage(hwnd, RECEIVE_MSG, MSG_SETREADY, 0);
                UpdateCanvasImage = false;
                //SetWindowPos(hCanvas, HWND_TOP, 0, 0, wParam, lParam, SWP_SHOWWINDOW);
            }
        }
        break;