|

|
#include "stdafx.h"
#include "resource.h"
#include "MyClass.h"
#include "MyDlg.h"
MyClass App;
MyDlg Dlg;
DEFINE_DLG(Dlg)
WINMAIN(App)
App.MenuId = IDC_HM040;
App.IconId = IDI_HM040;
App.IconIdSmall = IDI_SMALL;
INIT_DLG(Dlg)
// DTPicker 使用の為の初期化
INITCOMMONCONTROLSEX IC;
IC.dwSize = sizeof( INITCOMMONCONTROLSEX );
IC.dwICC = ICC_DATE_CLASSES;
InitCommonControlsEx( &IC );
END_WINMAIN
| |
|
|
|
|
#include "stdafx.h"
#include "resource.h"
#include "MyClass.h"
#include "MyDlg.h"
USE_OBJECT(MyDlg,Dlg)
//////////////////////////////////////////////////////////////////////
// 構築/消滅
//////////////////////////////////////////////////////////////////////
MyClass::MyClass()
{
}
MyClass::~MyClass()
{
}
void MyClass::WMCreate()
{
Dlg.Open( this, IDD_DIALOG1 );
this->ReturnValue = -1;
}
| |
|
|
|
|
#include "CLClass.h"
#include <LboxDatabase.h>
class MyDlg : public CLDlg
{
public:
void UpdateData();
void CancelData();
void CheckData();
void ProcOperator();
void ProcEnd();
void WMInitdialog();
MyDlg();
virtual ~MyDlg();
LboxDatabase CurDb; // データベースオブジェクト(実体型)
LboxDTPicker CreateDate; // DTPicker(実体型)
LboxCombobox *Type;
LboxCombobox *Syozoku;
| |
|
|
|
|
// *********************************************************
// ダイアログ初期化イベント
// *********************************************************
void MyDlg::WMInitdialog()
{
this->CenterWindow();
// ダイアログのプロパティでシステムメニューのチェックボックスを外して下さい
this->ChangeStyle( WS_MINIMIZEBOX | WS_SYSMENU, 0 );
this->ChangeExStyle( WS_EX_APPWINDOW, 0 );
this->ChangeIcon( IDI_HM040 );
this->StatusCreate( 0 );
LboxString Buff;
// MySQL 接続文字列
Buff.operator = ("MySQL,lightbox,root,");
CurDb.SetConnectString( 3, &Buff );
// 処理区分(コンボボックス)
Type = new LboxCombobox( this->GetHandle( IDC_TYPE ) );
Type->Add( "1", "登録" );
Type->Add( "2", "修正" );
Type->Add( "3", "削除" );
Type->Select( 0 );
// 社員コード
this->EditLimitText( IDC_KEY, 4 );
this->EditNumberonly( IDC_KEY, true );
// 氏名
this->EditLimitText( IDC_NAME, 50 );
// 所属(コンボボックス)
Syozoku = new LboxCombobox( this->GetHandle( IDC_SYOZOKU ) );
// 作成日(日時指定コントロール)
CreateDate.hWnd = this->GetHandle( IDC_CREATEDATE );
// 所属コンボボックスに所属データをロード
LboxString Query(100);
if ( CurDb.Connect() ) {
Query.operator = ("select コード,名称 from コード名称マスタ");
Query.operator += (" where 区分 = 2");
Query.operator += (" order by コード");
CurDb.LoadSqlData( Syozoku, &Query );
CurDb.DisConnect();
}
else {
MsgOk("データベースの接続に失敗しました");
this->EndFlg = true; // プログラム終了
return;
}
// プログラムID(プロジェクト名)
LboxString LWork(100);
LoadString(
this->Instance(),
IDC_HM040,
LWork.szLboxString,
100
);
this->EditSetText( IDC_PROGID, &LWork );
this->EditFocus( IDC_KEY );
}
| |
|
|
|
|
// *********************************************************
// ダイアログ終了処理
// *********************************************************
void MyDlg::ProcEnd()
{
delete Syozoku;
delete Type;
}
| |
|
|
|
|
// *********************************************************
// オペレータイベント
// *********************************************************
void MyDlg::ProcOperator()
{
switch( ControlId ) {
case IDC_CHECK:
CheckData();
break;
case IDC_CANCEL:
CancelData();
break;
case IDC_UPDATE:
UpdateData();
break;
}
}
| |
|
|
|
MsgErr はマクロです (CLClass.h にあります)
|
// *********************************************************
// HEAD 部チェック
// 1) HEAD 部チェック
// 2) BODY 部の画面編集
// 3) BODY 部への画面遷移
// *********************************************************
void MyDlg::CheckData()
{
LboxString LWork;
// 社員コードの未入力チェック
this->EditGetText( IDC_KEY, &LWork );
LWork.Trim( " " );
if ( LWork.operator == ( "" ) ) {
MsgErr( IDC_KEY , "社員コードを入力して下さい" );
return;
}
// データベース接続
if ( !CurDb.Connect() ) {
MsgOk("接続に失敗しました \n%s", CurDb.ErrMessage.szLboxString);
return;
}
// データ読み出し
LboxString Query;
BOOL bRet;
Query.operator = ("select * from 社員マスタ");
Query.operator += (" where 社員コード = '");
Query.operator += (&LWork);
Query.operator += ("'");
bRet = CurDb.Query( &Query );
if ( bRet ) {
// 氏名
CurDb.GetText( "氏名", &LWork );
this->EditSetText( IDC_NAME, &LWork );
// 所属
CurDb.GetText( "所属", &LWork );
Syozoku->Select( Syozoku->FindData( &LWork ) );
// 作成日
CurDb.GetText( "作成日", &LWork );
CreateDate.SetDateString( &LWork, "/" );
}
// データベース接続解除
CurDb.DisConnect();
// 処理区分別の画面編集
LboxString LType;
Type->SelectedGetData( <ype );
int nType;
nType = LType.Atoi();
switch( nType ) {
// 登録
case 1:
if ( bRet ) {
MsgErr( IDC_KEY ,"既に存在します" );
return;
}
this->Disable( IDC_TYPE );
this->Disable( IDC_KEY );
this->Disable( IDC_CHECK );
this->Enable( IDC_NAME );
this->Syozoku->Enable();
this->Syozoku->Select( 0 );
this->Enable( IDC_CANCEL );
this->Enable( IDC_UPDATE );
this->EditFocus( IDC_NAME );
break;
// 修正
case 2:
if ( !bRet ) {
MsgErr( IDC_KEY ,"該当する社員コードは存在しません" );
return;
}
this->Disable( IDC_TYPE );
this->Disable( IDC_KEY );
this->Disable( IDC_CHECK );
this->Enable( IDC_NAME );
this->Syozoku->Enable();
this->CreateDate.Enable();
this->Enable( IDC_CANCEL );
this->Enable( IDC_UPDATE );
this->EditFocus( IDC_NAME );
break;
// 削除
case 3:
if ( !bRet ) {
MsgErr( IDC_KEY ,"該当する社員コードは存在しません" );
return;
}
this->Disable( IDC_TYPE );
this->Disable( IDC_KEY );
this->Disable( IDC_CHECK );
this->Enable( IDC_CANCEL );
this->Enable( IDC_UPDATE );
this->EditFocus( IDC_CANCEL );
break;
}
}
| |
|
|
|
|
// *********************************************************
// キャンセル
// *********************************************************
void MyDlg::CancelData()
{
this->Enable( IDC_TYPE );
this->Enable( IDC_KEY );
this->Enable( IDC_CHECK );
this->EditSetText( IDC_NAME, "" );
this->Disable( IDC_NAME );
this->Syozoku->Select( -1 );
this->Syozoku->Disable();
LboxString LWork;
this->Date( &LWork );
this->CreateDate.SetDateString( &LWork, "/" );
this->CreateDate.Disable();
this->Disable( IDC_CANCEL );
this->Disable( IDC_UPDATE );
this->EditFocus( IDC_KEY );
}
| |
|
|
|
|
// *********************************************************
// 更新
// 1) 更新前のチェック
// 2) 更新
// 3) 更新後の画面編集
// 4) 更新後の画面遷移
// *********************************************************
void MyDlg::UpdateData()
{
// 更新確認
if ( !MsgOkCancel( "更新してよろしいですか? " ) ) {
return;
}
// データベース接続
if ( !CurDb.Connect() ) {
MsgOk("接続に失敗しました \n%s", CurDb.ErrMessage.szLboxString);
return;
}
// 処理区分別の更新処理
LboxString Query;
LboxString LWork;
LboxString LType;
Type->SelectedGetData( <ype );
int nType;
nType = LType.Atoi();
switch( nType ) {
// 登録
case 1:
Query.operator = ("insert into 社員マスタ");
Query.operator += (" (社員コード,氏名,所属,作成日,更新日)");
Query.operator += (" values(");
this->EditGetText( IDC_KEY, &LWork );
LWork.Enclose( "'" );
Query.operator += (&LWork);
this->EditGetText( IDC_NAME, &LWork );
LWork.Enclose( "'" );
Query.operator += (",");
Query.operator += (&LWork);
this->Syozoku->SelectedGetData( &LWork );
LWork.Enclose( "'" );
Query.operator += (",");
Query.operator += (&LWork);
Query.operator += (",CURDATE(),CURDATE())");
if ( !CurDb.Query( &Query ) ) {
MsgOk("%s", CurDb.ErrMessage.szLboxString);
CurDb.DisConnect();
return;
}
break;
// 修正
case 2:
Query.operator = ("update 社員マスタ");
Query.operator += (" set 氏名 = ");
this->EditGetText( IDC_NAME, &LWork );
LWork.Enclose( "'" );
Query.operator += (&LWork);
Query.operator += (",所属 = ");
this->Syozoku->SelectedGetData( &LWork );
LWork.Enclose( "'" );
Query.operator += (&LWork);
Query.operator += (",作成日 = ");
this->CreateDate.GetDateString( &LWork );
LWork.Enclose( "'" );
Query.operator += (&LWork);
Query.operator += (",更新日 = CURDATE()");
Query.operator += (" where 社員コード = ");
this->EditGetText( IDC_KEY, &LWork );
LWork.Enclose( "'" );
Query.operator += (&LWork);
if ( !CurDb.Query( &Query ) ) {
MsgOk("%s", CurDb.ErrMessage.szLboxString);
CurDb.DisConnect();
return;
}
break;
// 削除
case 3:
Query.operator = ("delete from 社員マスタ");
Query.operator += (" where 社員コード = ");
this->EditGetText( IDC_KEY, &LWork );
LWork.Enclose( "'" );
Query.operator += (&LWork);
if ( !CurDb.Query( &Query ) ) {
MsgOk("%s", CurDb.ErrMessage.szLboxString);
CurDb.DisConnect();
return;
}
break;
}
// データベース接続解除
CurDb.DisConnect();
// 画面編集
this->StatusSetText( "正常に更新されました" );
this->EditSetText( IDC_KEY, "" );
// 画面遷移
this->CancelData();
}
| |
|
|
|
|
// *********************************************************
// オペレータイベント
// *********************************************************
void MyDlg::ProcOperator()
{
switch( ControlId ) {
case IDC_CHECK:
CheckData();
break;
case IDC_CANCEL:
CancelData();
break;
case IDC_UPDATE:
UpdateData();
break;
case IDC_KEY:
if ( this->NotifyCode == EN_KILLFOCUS ) {
this->StatusSetText( "" );
LboxString LWork;
this->EditGetText( IDC_KEY, &LWork );
if ( LWork.operator != ("") ) {
this->EditPrintf(
IDC_KEY,
"%04s",
LWork.szLboxString
);
}
}
break;
}
}
| |
|
|
|
|
class MyDlg : public CLDlg
{
public:
void WMAll();
void UpdateData();
void CancelData();
void CheckData();
void ProcOperator();
void ProcEnd();
void WMInitdialog();
MyDlg();
virtual ~MyDlg();
LboxDatabase CurDb; // データベースオブジェクト(実体型)
LboxDTPicker CreateDate;
LboxCombobox *Type;
LboxCombobox *Syozoku;
LboxTool Tool;
};
| |
|
|
// *********************************************************
// イベント処理
// *********************************************************
void MyDlg::WMAll()
{
switch( message ) {
case LBOX_RETURN:
// Enter キーをタブ扱いしないコントロール
if ( this->GetHandle( IDC_CHECK ) == (HWND)this->wParam ) {
break;
}
if ( this->GetHandle( IDC_CANCEL ) == (HWND)this->wParam ) {
break;
}
if ( this->GetHandle( IDC_UPDATE ) == (HWND)this->wParam ) {
break;
}
this->Tool.TabKey();
break;
}
}
| |
|
|
|
|
// *********************************************************
// オペレータイベント
// *********************************************************
void MyDlg::ProcOperator()
{
switch( ControlId ) {
case IDC_CHECK:
CheckData();
break;
case IDC_CANCEL:
CancelData();
break;
case IDC_UPDATE:
UpdateData();
break;
case IDM_EXIT:
this->PostCommand( IDCANCEL );
break;
case IDC_KEY:
if ( this->NotifyCode == EN_KILLFOCUS ) {
this->StatusSetText( "" );
LboxString LWork;
this->EditGetText( IDC_KEY, &LWork );
if ( LWork.operator != ("") ) {
this->EditPrintf(
IDC_KEY,
"%04s",
LWork.szLboxString
);
}
}
break;
}
}
| |
|
|
|
MyDlg.cpp
|
#include "stdafx.h"
#include "resource.h"
#include "MyDlg2.h"
#include "MyDlg.h"
USE_OBJECT(MyDlg2,Dlg2)
| |
|
|
// *********************************************************
// オペレータイベント
// *********************************************************
void MyDlg::ProcOperator()
{
switch( ControlId ) {
case IDC_CHECK:
CheckData();
break;
case IDC_CANCEL:
CancelData();
break;
case IDC_UPDATE:
UpdateData();
break;
case IDM_EXIT:
this->PostCommand( IDCANCEL );
break;
case IDC_KEY:
if ( this->NotifyCode == EN_KILLFOCUS ) {
this->StatusSetText( "" );
LboxString LWork;
this->EditGetText( IDC_KEY, &LWork );
if ( LWork.operator != ("") ) {
this->EditPrintf(
IDC_KEY,
"%04s",
LWork.szLboxString
);
}
}
break;
case IDM_REF:
Dlg2.Open( this, IDD_DIALOG2 );
break;
}
}
| |
|
MyDlg2.h
|
#include "CLClass.h"
#include <LboxDatabase.h>
class MyDlg2 : public CLDlg
{
public:
void LVDblclick();
void WMAll();
void GetData();
void ProcOperator();
void ProcEnd();
void WMInitdialog();
MyDlg2();
virtual ~MyDlg2();
LboxDatabase CurDb; // データベースオブジェクト(実体型)
LboxListview *LView;
};
| |
|
MyDlg2.cpp
|
#include "stdafx.h"
#include "resource.h"
#include "MyDlg2.h"
#include "MyDlg.h"
USE_OBJECT(MyDlg,Dlg)
//////////////////////////////////////////////////////////////////////
// 構築/消滅
//////////////////////////////////////////////////////////////////////
MyDlg2::MyDlg2()
{
}
MyDlg2::~MyDlg2()
{
}
// *********************************************************
// ダイアログ初期化イベント
// *********************************************************
void MyDlg2::WMInitdialog()
{
this->CenterWindow();
// ダイアログのプロパティでシステムメニューのチェックボックスを外して下さい
this->ChangeStyle( WS_MINIMIZEBOX | WS_SYSMENU, 0 );
this->ChangeExStyle( WS_EX_APPWINDOW, 0 );
this->ChangeIcon( IDI_HM040 );
this->StatusCreate( 0 );
LboxString Buff;
// MySQL 接続文字列
Buff.operator = ("MySQL,lightbox,root,");
CurDb.SetConnectString( 3, &Buff );
// リストビューインスタンス作成
LView = new LboxListview( ::GetDlgItem( hDlg, IDC_LIST1 ), 0 );
LView->Grid();
GetData();
this->MoveWindow( 0, 0 );
}
// *********************************************************
// ダイアログ終了処理
// *********************************************************
void MyDlg2::ProcEnd()
{
delete LView;
}
// *********************************************************
// オペレータイベント
// *********************************************************
void MyDlg2::ProcOperator()
{
switch( ControlId ) {
case IDOK:
GetData();
break;
}
}
// *********************************************************
// 問合せ処理
// *********************************************************
void MyDlg2::GetData()
{
if ( !CurDb.Connect() ) {
MsgOk("接続に失敗しました \n%s", CurDb.ErrMessage.szLboxString);
return;
}
LboxString Query;
Query.operator = ("select * from 社員マスタ");
LboxString Cond( "" );
LboxString Buff;
this->EditGetText( IDC_EDIT1, &Buff );
Buff.Trim( " " );
if ( Buff.operator != ( "" ) ) {
if ( Cond.operator == ( "" ) ) {
Cond.operator += (" where ");
}
else {
Cond.operator += (" and ");
}
Cond.operator += (" 氏名 like ");
Buff.Enclose( "%" );
Buff.Enclose( "'" );
Cond.operator += ( &Buff );
}
Query.operator += ( &Cond );
int nRet;
LView->Hide();
this->StatusSetText( "" );
nRet = CurDb.LoadSqlData( LView, 0, &Query );
switch( nRet ) {
case -1:
this->StatusSetText( &(CurDb.ErrMessage) );
break;
case 0:
this->StatusSetText( "対象データが存在しません" );
break;
default:
this->StatusPrintf( "%d 件のデータが選択されました", nRet );
break;
}
LView->Fit();
LView->Show();
CurDb.DisConnect();
}
// *********************************************************
// 初期化とオペレータイベント以外の処理
// *********************************************************
void MyDlg2::WMAll()
{
USE_LVIEW(LView)
}
// *********************************************************
// ダブルクリックイベント
// *********************************************************
void MyDlg2::LVDblclick()
{
LboxString LWork;
if ( LView->IsHandle( this->hTargetWindow ) ) {
LView->GetColumnText( 0, &LWork );
Dlg.EditSetText( IDC_KEY, &LWork );
this->PostCommand( IDCANCEL );
Dlg.Type->SelectedGetData( &LWork );
if ( LWork.operator == ("1") ) {
Dlg.Type->Select( 1 );
}
Dlg.PostCommand( IDC_CHECK );
}
}
| |
|
HM040.cpp
|
#include "stdafx.h"
#include "resource.h"
#include "MyClass.h"
#include "MyDlg.h"
#include "MyDlg2.h"
MyClass App;
MyDlg Dlg;
MyDlg2 Dlg2;
DEFINE_DLG(Dlg)
DEFINE_DLG(Dlg2)
WINMAIN(App)
App.MenuId = IDC_HM040;
App.IconId = IDI_HM040;
App.IconIdSmall = IDI_SMALL;
INIT_DLG(Dlg)
INIT_DLG(Dlg2)
// DTPicker 使用の為の初期化
INITCOMMONCONTROLSEX IC;
IC.dwSize = sizeof( INITCOMMONCONTROLSEX );
IC.dwICC = ICC_DATE_CLASSES;
InitCommonControlsEx( &IC );
END_WINMAIN
| |
|
|
|
MyDlg.h
|
#include "CLClass.h"
#include <LboxDatabase.h>
class MyDlg : public CLDlg
{
public:
void WMAll();
void UpdateData();
void CancelData();
void CheckData();
void ProcOperator();
void ProcEnd();
void WMInitdialog();
MyDlg();
virtual ~MyDlg();
LboxDatabase CurDb; // データベースオブジェクト(実体型)
LboxDTPicker CreateDate;
LboxCombobox *Type;
LboxCombobox *Syozoku;
LboxTool Tool;
LboxMenu Menu;
};
| |
|
WMInitdialog() の最後で以下を実行
|
Menu.SetBaseMenu( this->hDlg );
| |
|
CheckData() の最後で以下を実行
|
Menu.Disable( "", IDM_REF, true );
this->DrawMenuBar();
| |
|
CancelData() の最後で以下を実行
|
Menu.Disable( "", IDM_REF, false );
this->DrawMenuBar();
| |
|
|
|