#include <windows.h>
#include <windowsx.h>
#include<string>
#include"resource.h"
#include "winres.h"
static CHOOSECOLOR cc;
static COLORREF CR[16];
static COLORREF backResult;
static COLORREF wordColor;
HBRUSH hBrush;
//函式宣告
BOOL InitWindow(HINSTANCE hInstance, int nCmdShow);
BOOL CALLBACK ColorProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);
LRESULT CALLBACK WinProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);
int WINAPI WinMain(HINSTANCE hInstance, //當前實體句柄
HINSTANCE hPrevInstance, //前一個實體句柄
PSTR szCmdLine, //命令列字符
int iCmdShow) //視窗顯示方式
{
MSG msg;
char *p;
//創建主視窗
if (!InitWindow(hInstance, iCmdShow))
return FALSE;
p = 0;
//進入訊息回圈:從該應用程式的訊息佇列中檢取訊息,
//送到訊息處理程序,當檢取到WM_QUIT訊息時,退出訊息回圈。
while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}
static BOOL InitWindow(HINSTANCE hInstance, int iCmdShow)
{
static TCHAR szAppName[] = TEXT("EasyWin"); //應用程式名稱
HWND hwnd; //視窗句柄
WNDCLASS wcMainWnd; //視窗類結構
ATOM a;
//填充視窗類結構
wcMainWnd.style = CS_VREDRAW | CS_HREDRAW;
wcMainWnd.lpfnWndProc = WinProc;
wcMainWnd.cbClsExtra = 0;
wcMainWnd.cbWndExtra = 0;
wcMainWnd.hInstance = hInstance;
wcMainWnd.hIcon = LoadIcon(hInstance, IDI_APPLICATION);
wcMainWnd.hCursor = LoadCursor(NULL, IDC_ARROW);
wcMainWnd.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
wcMainWnd.lpszMenuName = MAKEINTRESOURCE(IDR_MENU1);
wcMainWnd.lpszClassName = szAppName;
//注冊視窗類
a = RegisterClass(&wcMainWnd);
if (!a)
{
MessageBox(NULL, TEXT("注冊視窗類失敗!"), szAppName,
MB_ICONERROR);
return 0;
}
//創建主視窗
hwnd = CreateWindow(szAppName, //視窗類名稱
TEXT("Windows 應用程式基本框架"), //視窗標題
WS_OVERLAPPEDWINDOW, //視窗風格
100, //視窗位置的x坐標
100, //視窗位置的y坐標
400, //視窗的寬度
300, //視窗的高度
NULL, //父視窗句柄
NULL, //選單句柄
hInstance, //應用程式實體句柄
NULL); //視窗創建資料指標
if (!hwnd) return FALSE;
//顯示并更新視窗
ShowWindow(hwnd, iCmdShow);
UpdateWindow(hwnd);
return TRUE;
}
LRESULT CALLBACK WinProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
HDC hdc;
PAINTSTRUCT ps;
RECT rect;
switch (message)
{
case WM_CREATE:
cc.Flags = CC_RGBINIT | CC_FULLOPEN;
cc.hInstance = NULL;
cc.hwndOwner = hWnd;
cc.lCustData = 0;
cc.lpCustColors = CR;
cc.lpfnHook = NULL;
cc.lpTemplateName = NULL;
cc.lStructSize = sizeof(CHOOSECOLOR);
cc.rgbResult = RGB(0, 0, 0);
return 0;
case WM_PAINT: //客戶區重繪訊息
//取得設備環境句柄
hdc = BeginPaint(hWnd, &ps);
//取得視窗客戶區矩形
GetClientRect(hWnd, &rect);
//設定文字顏色
SetTextColor(hdc, wordColor);
//輸出文字
DrawText(hdc, TEXT("sdfkgjfsk"),
-1, &rect, DT_SINGLELINE | DT_CENTER | DT_VCENTER);
//釋放資源
if (wParam)
{
hBrush = CreateSolidBrush(backResult);
SetClassLong(hWnd, GCL_HBRBACKGROUND, (LONG)backResult);
InvalidateRect(hWnd, NULL, TRUE);
}
EndPaint(hWnd, &ps);
return 0;
case WM_COMMAND:
switch (LOWORD(wParam))
{
case ID_40001:
ChooseColor(&cc);
wordColor = cc.rgbResult;
InvalidateRect(hWnd, NULL, TRUE);
return 0;
case ID_40002:
DialogBox(NULL,
MAKEINTRESOURCE(IDD_DIALOG1), hWnd, ColorProc);
InvalidateRect(hWnd, NULL, TRUE);
/*SendMessage(hWnd, WM_COMMAND, wParam, lParam);*/
}
case WM_DESTROY:
PostQuitMessage(0);
return 0;
}
return DefWindowProc(hWnd, message, wParam, lParam);
}
BOOL CALLBACK ColorProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
BYTE bRed;
BYTE bGreen;
BYTE bBlue;
static char copyResult0[10], copyResult1[10], copyResult2[10];
char Result[50];
switch (message)
{
case WM_INITDIALOG:
return FALSE;
case WM_COMMAND:
switch (LOWORD(wParam))
{
case IDC_BUTTON1:
ChooseColor(&cc);//呼叫通用對話框
backResult = cc.rgbResult;
bRed = GetRValue(backResult);
bGreen = GetGValue(backResult);
bBlue = GetBValue(backResult);
sprintf(Result, "%d", bRed);
memcpy(©Result0[0], Result, sizeof(Result));
memset(Result, 0, sizeof(Result));
sprintf(Result, "%d", bGreen);
memcpy(©Result1[0], Result, sizeof(Result));
memset(Result, 0, sizeof(Result));
sprintf(Result, "%d", bBlue);
memcpy(©Result2[0], Result, sizeof(Result));
memset(Result, 0, sizeof(Result));
strcat(copyResult0, ",");
strcat(copyResult0, copyResult1);
strcat(copyResult0, ",");
strcat(copyResult0, copyResult2);
SetWindowText(GetDlgItem(hWnd, IDC_EDIT1), copyResult0);
memset(copyResult0, 0, sizeof(copyResult0));
memset(copyResult1, 0, sizeof(copyResult1));
memset(copyResult2, 0, sizeof(copyResult2));
InvalidateRect(hWnd, NULL, TRUE);
return TRUE;
case IDOK:
SendMessage(GetParent(hWnd), WM_PAINT, wParam, lParam);
EndDialog(hWnd, 1);
return TRUE;
case IDCANCEL:
EndDialog(hWnd, 0);
return TRUE;
}
break;
}
return FALSE;
}
uj5u.com熱心網友回復:
case WM_COMMAND:
switch (LOWORD(wParam))
{
case ID_40001:
ChooseColor(&cc);
wordColor = cc.rgbResult;
InvalidateRect(hWnd, NULL, TRUE);
return 0;
case ID_40002:
DialogBox(NULL,
MAKEINTRESOURCE(IDD_DIALOG1), hWnd, ColorProc);
InvalidateRect(hWnd, NULL, TRUE);
/*SendMessage(hWnd, WM_COMMAND, wParam, lParam);*/
// 直 通 到 哪里 ? WM_DESTROY: ? 加 return or break
}
case WM_DESTROY:
PostQuitMessage(0);
return 0;
uj5u.com熱心網友回復:
LRESULT CALLBACK WinProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
HDC hdc;
PAINTSTRUCT ps;
RECT rect;
switch (message)
{
case WM_CREATE:
cc.Flags = CC_RGBINIT | CC_FULLOPEN;
cc.hInstance = NULL;
cc.hwndOwner = hWnd;
cc.lCustData = 0;
cc.lpCustColors = CR;
cc.lpfnHook = NULL;
cc.lpTemplateName = NULL;
cc.lStructSize = sizeof(CHOOSECOLOR);
cc.rgbResult = RGB(0, 0, 0);
return 0;// WM_CREATE:
case WM_PAINT: //客戶區重繪訊息
//取得設備環境句柄
hdc = BeginPaint(hWnd, &ps);
//取得視窗客戶區矩形
GetClientRect(hWnd, &rect);
//設定文字顏色
SetTextColor(hdc, wordColor);
//輸出文字
DrawText(hdc, TEXT("sdfkgjfsk"),
-1, &rect, DT_SINGLELINE | DT_CENTER | DT_VCENTER);
//釋放資源
if (wParam)
{
hBrush = CreateSolidBrush(backResult);
SetClassLong(hWnd, GCL_HBRBACKGROUND, (LONG)backResult);
InvalidateRect(hWnd, NULL, TRUE);
}
EndPaint(hWnd, &ps);
return 0;// WM_PAINT:
case WM_COMMAND:
switch (LOWORD(wParam))
{
case ID_40001:
ChooseColor(&cc);
wordColor = cc.rgbResult;
InvalidateRect(hWnd, NULL, TRUE);
return 0;
case ID_40002:
DialogBox(NULL,
MAKEINTRESOURCE(IDD_DIALOG1), hWnd, ColorProc);
InvalidateRect(hWnd, NULL, TRUE);
/*SendMessage(hWnd, WM_COMMAND, wParam, lParam);*/
return;
}
break;// WM_COMMAND:
case WM_DESTROY:
PostQuitMessage(0);
return 0;
}// end switch (message)
return DefWindowProc(hWnd, message, wParam, lParam);
}
uj5u.com熱心網友回復:
謝謝大家,我知道為什么了uj5u.com熱心網友回復:
你好 我也遇到了同樣的問題,一直困擾我,到底是什么原因導致的啊uj5u.com熱心網友回復:
。不好意思才看到,里面有一句少了return 0
uj5u.com熱心網友回復:
case ID_40002:沒有return 或者break. 導致代碼執行到下面case.
uj5u.com熱心網友回復:
是的。后面少了一句

uj5u.com熱心網友回復:
2樓正解,最全轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/82944.html
標籤:基礎類
上一篇:在VC++6.0中利用MSChart怎么畫曲線圖?跪求大神實體!
下一篇:再論MFC與QT
